我们有一个网站使用默认的 System.Web.Security.SQLMembershipProvider 来处理用户及其密码。今天我注意到空格不算作一个有点奇怪的特殊字符,这让我想到其他特殊字符是否也无效?它产生了一个小问题,因为我们还有验证正则表达式来匹配链中较早的密码,并且那些将空格视为有效的特殊字符。
我的配置如下所示:
<add connectionStringName="MyConnectionString"
enablePasswordRetrieval="false"
enablePasswordReset="true"
requiresQuestionAndAnswer="false"
applicationName="Payson 2.0"
requiresUniqueEmail="true"
passwordFormat="Hashed"
maxInvalidPasswordAttempts="20"
minRequiredPasswordLength="8"
minRequiredNonalphanumericCharacters="0"
passwordStrengthRegularExpression="(?=.{6,})(?=(.*\d){1,})(?=(.*\W){1,})"
passwordAttemptWindow="10"
name="AspNetSqlMembershipProvider"
type="System.Web.Security.SqlMembershipProvider, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"/>
你会认为这.*\W
会匹配空格,但它不会。如果我尝试将密码从更改为abcdefg!1
失败abcdefg 1
,我的问题是为什么以及是否还有其他不明显的情况?