2008-12-17 22 views
19

मेरे पास एक एएसपी.नेट पृष्ठ है जो व्यवस्थापक को उपयोगकर्ता के लिए पासवर्ड बदलने की अनुमति देता है। चूंकि व्यवस्थापक उपयोगकर्ता का पासवर्ड पता नहीं है, मैं उपयोग कर रहा हूँ निम्नलिखित:आप कैसे जांच सकते हैं कि कोई एएसपी.NET सदस्यता पासवर्ड कॉन्फ़िगर की गई जटिलता आवश्यकताओं को पूरा करेगा या नहीं?

MembershipUser member = Membership.GetUser(_usernameTextBox.Text); 
member.ChangePassword(member.ResetPassword(), _passNewTextBox.Text); 

- के रूप में इस SO question द्वारा वर्णित।

यदि नया पासवर्ड जटिलता आवश्यकताओं को पूरा नहीं करता है जो web.config फ़ाइल में कॉन्फ़िगर किए गए हैं, तो पासवर्ड रीसेट हो जाएगा, लेकिन वांछित में बदल नहीं जाएगा। यदि नया पासवर्ड जटिलता आवश्यकताओं को पूरा नहीं करता है, तो पासवर्ड बिल्कुल नहीं बदला जाना चाहिए।

क्या जटिलता आवश्यकताओं के खिलाफ नए पासवर्ड का परीक्षण करने का कोई आसान तरीका है?

उत्तर

17

आप के खिलाफ पासवर्ड का परीक्षण करने के निम्नलिखित गुण का उपयोग कर सकते हैं:

ध्यान दें कि PasswordStrengthRegularExpression संपत्ति एक खाली स्ट्रिंग अगर आपके पास हो जाएगा इसे web.config फ़ाइल में कॉन्फ़िगर नहीं किया गया है।

नियमित अभिव्यक्ति मिलान पर जानकारी के लिए, MSDN उपयोगी टिप्पणी के लिए मैट के लिए पर Regex.IsMatch(String)

* धन्यवाद संदर्भ देखें।

+0

यह सदस्यता की तरह दिखता है। पासवर्डवर्डर रेगुलरएक्सप्रेस "" है यदि यह web.config में कॉन्फ़िगर नहीं है। MinRequiredPasswordLength और MinRequiredNonAlphanumericCharacters अभी भी कॉन्फ़िगर किया जा सकता है। –

0

आप एक नियमित अभिव्यक्ति सत्यापनकर्ता का उपयोग यह जांचने के लिए कर सकते हैं कि पासवर्ड जटिलता आवश्यकताओं को पूरा करता है या नहीं।

इसके अलावा आप Pasword Strength Meter नियंत्रण का उपयोग कर सकते हैं।

0

यह सबसे आसान तरीका नहीं हो सकता है, लेकिन पृष्ठ पर एक नियमित अभिव्यक्ति सत्यापनकर्ता का उपयोग करें और इसे पासवर्ड आवश्यकताओं से मेल खाते हैं। यदि पासवर्ड अच्छा नहीं है तो इस तरह आपको वापस पोस्ट करने की भी आवश्यकता नहीं है।

+0

यदि आप इस दृष्टिकोण का उपयोग करने का निर्णय लेते हैं, तो प्रदाता से सर्वर पक्ष पर पासवर्ड जटिलता RegEx प्राप्त करना सुनिश्चित करें ताकि आपको इसे 2 अलग-अलग स्थानों पर परिभाषित करने की आवश्यकता न हो। केवल एक चीज यह है कि आप सदस्यता प्रदाता को केवल एक वैधकर्ता के साथ परिभाषित करने में सक्षम नहीं होंगे। – PhilDulac

18
/// <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; 
} 
+1

इसे 'सदस्यता प्रदाता' एक्सटेंशन विधि क्यों न बनाएं और इसे 'सदस्यता। चेकपैसवर्ड कॉम्प्लेक्सिटी (...)' जैसे उपयोग करें? – PhilDulac

+0

@ फिलडुलैक, क्योंकि 'सदस्यता' एक अलग प्रकार की 'System.Web.Security.Membership' को संदर्भित करता है, एक स्थिर वर्ग जिसे आप विस्तार विधियां नहीं जोड़ सकते हैं। – benmccallum

+0

@benmccallum मैंने एक टाइपो बनाया, मेरा मतलब 'सदस्यता प्रदाता' के लिए एक एक्सटेंशन विधि जोड़ना था। उपयोग 'सदस्यता' होगा। प्रदाता। चेकपैसवर्ड कॉम्प्लेक्सिटी (...) ' – PhilDulac

3

मुझे विकी तक पहुंच नहीं है।

एक छोटी बग को ठीक करने के लिए एक पंक्ति को समायोजित किया जाना चाहिए।

अगर (nonAlnumCount < Membership.MinRequiredNonAlphanumericCharacters) के रूप में अगर (nonAlnumCount < membershipProvider.MinRequiredNonAlphanumericCharacters) इस प्रकार संशोधित

+0

मैंने तदनुसार विकी को अपडेट किया है। अच्छी पकड़। –

3

बाम्बा के समाधान के आधार पर, मैं सदस्यता प्रदाता पर एक विस्तार विधि बनाने का फैसला किया (और कम कोड:

public static bool IsPasswordValid(this MembershipProvider membershipProvider, string password) 
    { 
     return (!string.IsNullOrEmpty(password) && // Password is not empty or null AND 
      password.Length >= membershipProvider.MinRequiredPasswordLength && // Meets required length AND 
      password.Count(c => !char.IsLetterOrDigit(c)) >= membershipProvider.MinRequiredNonAlphanumericCharacters && // Contains enough non-alphanumeric characters AND 
      (string.IsNullOrEmpty(membershipProvider.PasswordStrengthRegularExpression) || // Either there is no RegEx requirement OR 
       Regex.IsMatch(password, membershipProvider.PasswordStrengthRegularExpression))); // It matches the RegEx 
    } 

इसका इस्तेमाल करने के लिए आपको केवल जहाँ भी जरूरत Membership.Provider.IsPasswordValid(...) कॉल करनी होगी

संबंधित मुद्दे

 संबंधित मुद्दे