मैं PHP में हैश पासवर्ड के लिए crypt()
का उपयोग कर रहा हूं, और पासवर्ड जांच करते समय परिणामी हैश की समानता का परीक्षण करने का सबसे सुरक्षित तरीका काम करने की कोशिश कर रहा हूं ।strcmp बनाम == बनाम === PHP में हैश समानता
तीन विकल्प है कि मैं देख सकता हूँ रहे हैं: - डबल बराबर
function checkPassword($hash, $password)
{
return crypt($password, $hash) == $hash;
}
विकल्प 2 -
विकल्प 1 ट्रिपल बराबर
function checkPassword($hash, $password)
{
return crypt($password, $hash) === $hash;
}
विकल्प 3 - strcmp()
function checkPassword($hash, $password)
{
return strcmp(crypt($password, $hash), $hash) === 0;
}
मेरा अंतर्ज्ञान मुझे बताता है कि विकल्प 1 टाइपिंग जांच की कमी के कारण एक बुरा विचार है, और विकल्प 2 या 3 बेहतर होने की संभावना है। हालांकि, अगर कोई विशिष्ट मामला है तो ===
या strcmp
विफल होने पर मैं काम नहीं कर सकता। इस उद्देश्य के लिए सबसे सुरक्षित कौन सा है?
इसे पढ़ें: http://raz0r.name/vulnerabilities/simple-machines-forum/ – user956584
@Userpassword दिलचस्प बग! मुझे आश्चर्य है कि कैसे PHP संख्याओं के रूप में डालने पर '$ 2a $ 10 $ ... $ 'जैसे तारों को संभालता है ... – Polynomial
यदि आप केवल हैश की तुलना करना चाहते हैं, तो बस' === 'का उपयोग करें। यदि आप वास्तव में सुरक्षा और संभावित समय के हमलों (यहां तक कि नेटवर्क जिटर के बावजूद) की परवाह करते हैं, तो आपको [इस] (https://github.com/delight-im/Faceless/issues/4) या [यह] (https://github.com/delight-im/Faceless/pull/5) चर्चा या 'हैश_equals()' फ़ंक्शन (PHP 5.6+) का उपयोग करें। – caw