ASP.net PasswordStrengthRegularExpression防止常见的密码,如

2019-09-29 16:52发布

一位顾客问我,以防止输入常用的密码的用户,但允许他们只使用字母数字的密码。

你知道正则表达式中内置的使用PasswordStrengthRegularExpression选项?

编辑 :我知道是很模糊的,那我告诉客户。 该定义是一样的东西

  • 不要让相同的字符连续多于3次。(1111,2222等)
  • 不要让升序或降序趋势(12345,ABCDE,6543等)

Answer 1:

这是问的方式从一个正则表达式太多。 你可以覆盖重复字符的东西很轻松地:

^(?:(.)(?!\1\1)){6,}$

但要禁止的连续字符运行的唯一方法是枚举所有可能性:

^(?:(?!123|234|345|456|567|678|789).)*$

......循环往复。 我认为你能做的最好的是需要字符类型的复杂混合 - 例如,至少每一个大写字母,小写字母和数字二:

^(?=(?:[^0-9]*[0-9]){2})
 (?=(?:[^A-Z]*[A-Z]){2})
 (?=(?:[^a-z]*[a-z]){2})
 (?:([A-Za-z0-9])(?!\1\1)){6,}$

这将迫使用户是一个小创意。



Answer 2:

这个怎么样?

passwordStrengthRegularExpression=" @\"(?=.{6,})(?=(.*\d){1,})(?=(.*\W){1,})"

验证密码符合下列条件:

  • 比有七个字符。
  • 至少包含一个数字。
  • 至少包含一个特殊(非字母数字)字符。

http://msdn.microsoft.com/en-us/library/system.web.security.membership.passwordstrengthregularexpression.aspx



Answer 3:

我不知道,如果一个正则表达式可以处理要求,但功能只可能更容易阅读反正。 像下面的东西,可以消除那些遵循1(字母或数字)的升序或降序模式连续三个相等的字符或连续的三个字符什么。

static bool IsPasswordRelativelyStrong(string input)
{
    for (int i = 2; i < input.Length; i++)
    {
        if (input[i] == input[i - 1] - 1 && input[i - 1] == input[i - 2] - 1)
            return false;
        else if (input[i] == input[i - 1] + 1 && input[i - 1] == input[i - 2] + 1)
            return false;
        else if (input[i] == input[i - 1] && input[i - 1] == input[i - 2])
            return false;
    }

    return true;
}

因此,考虑下面的数组

string[] passwords = { "123456", "abcde", "654321", "111223", "11223344" };

只有最后一个通行证。 该功能可以扩展到考虑是否不允许和/或要求非字母数字字符和密码是否必须超过一个最小长度的要求。



Answer 4:

可以断言的复杂的最低水平; 例如“至少一个大写字母,一个小写字母,一个数字,最小长度为6个字符,字母数字字符”可以写成

 ^(?=.*[A-Z])(?=.*[a-z])(?=.*[0-9])[A-Za-z0-9]{6,}$


Answer 5:

尝试这个:

passwordStrengthRegularExpression="^\S*([a-zA-Z0-9]{1,10})$"


文章来源: ASP.net PasswordStrengthRegularExpression to prevent common passwords like “11111” or “123456”