Asp.net
如何測試 ASP.NET 成員密碼是否滿足配置的複雜性要求?
我有一個 ASP.NET 頁面,它允許管理員更改使用者的密碼。由於管理員不知道使用者的密碼,我正在使用以下內容:
MembershipUser member = Membership.GetUser(_usernameTextBox.Text); member.ChangePassword(member.ResetPassword(), _passNewTextBox.Text);
- 正如這個SO 問題所描述的。
如果新密碼不符合 web.config 文件中配置的複雜性要求,則密碼將被重置,但不會更改為所需的密碼。如果新密碼不滿足複雜性要求,則根本不應該更改密碼。
是否有一種簡單的方法可以根據複雜性要求測試新密碼?
您可以使用以下屬性來測試密碼:
- Membership.PasswordStrengthRegularExpression
- Membership.MinRequiredPasswordLength
- Membership.MinRequiredNonAlphanumericCharacters
請注意,如果您尚未在 web.config 文件中配置 PasswordStrengthRegularExpression 屬性,它將是一個空字元串。
有關正則表達式匹配的資訊,請參閱Regex.IsMatch(String)上的 MSDN 參考
*感謝馬特的有用評論。
/// <summary> /// Checks password complexity requirements for the actual membership provider /// </summary> /// <param name="password">password to check</param> /// <returns>true if the password meets the req. complexity</returns> static public bool CheckPasswordComplexity(string password) { return CheckPasswordComplexity(Membership.Provider, password); } /// <summary> /// Checks password complexity requirements for the given membership provider /// </summary> /// <param name="membershipProvider">membership provider</param> /// <param name="password">password to check</param> /// <returns>true if the password meets the req. complexity</returns> static public bool CheckPasswordComplexity(MembershipProvider membershipProvider, string password) { if (string.IsNullOrEmpty(password)) return false; if (password.Length < membershipProvider.MinRequiredPasswordLength) return false; int nonAlnumCount = 0; for (int i = 0; i < password.Length; i++) { if (!char.IsLetterOrDigit(password, i)) nonAlnumCount++; } if (nonAlnumCount < membershipProvider.MinRequiredNonAlphanumericCharacters) return false; if (!string.IsNullOrEmpty(membershipProvider.PasswordStrengthRegularExpression) && !Regex.IsMatch(password, membershipProvider.PasswordStrengthRegularExpression)) { return false; } return true; }