ASP.net PasswordStrengthRegularExpression防止常见密码,如“11111”或“123456”

时间:2010-06-07 20:31:10

标签: asp.net regex security passwords

客户要求我阻止用户输入常用密码,但允许他们仅使用字母数字密码。

您是否知道要在内置PasswordStrengthRegularExpression选项中使用的正则表达式?

编辑:我知道这很模糊,而且我告诉客户。定义类似于

  • 连续3次不要再使用相同的角色。(1111,2222等)
  • 不允许上升或下降趋势(12345,abcde,6543等)

5 个答案:

答案 0 :(得分:2)

这对正则表达式来说太过分了。你可以很容易地覆盖重复的角色:

^(?:(.)(?!\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,}$

这将迫使用户有点创意。

答案 1 :(得分:1)

这个怎么样?

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

验证密码符合以下条件:

  • 大于七个字符。
  • 至少包含一位数字。
  • 至少包含一个特殊内容 (非字母数字)字符。

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

答案 2 :(得分:1)

我不确定正则表达式是否可以处理该要求,但无论如何,函数可能更具可读性。类似下面的内容将消除任何三个连续相等的字符或三个连续字符,这些字符遵循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" };

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

答案 3 :(得分:0)

您可以断言最低级别的复杂性;即G。 “至少一个大写,一个小写字母,一个数字,最小长度为6个字符,只有字母数字字符”可以写成

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

答案 4 :(得分:-2)

试试这个:

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