का उपयोग कर नमक और हश किए गए पासवर्ड को समझना और पुन: उत्पन्न करना मैं कोहाना वी 2.3.4 में ऑथ मॉड्यूल का उपयोग कर रहा हूं।कोहाना: ऑथ मॉड्यूल
प्रमाणीकरण उपयोगकर्ताओं के संदर्भ में, दो चरण की प्रक्रिया है। प्रवेश बिंदु फ़ंक्शन लॉगिन है। यह पहला कार्य डेटाबेस में संग्रहीत पासवर्ड पुनर्प्राप्त करना और पासवर्ड पुनर्प्राप्त करना और नमक मान निर्धारित करना है। नमक माना जाता है कि मूल्यों की एक सरणी द्वारा निर्धारित किया जाता है, प्रत्येक $ नमक में एक बिंदु से संबंधित होता है। $ पासवर्ड नमक के एक और हिस्से को पेश करने के लिए मूल्य धोया जाता है। मेरे मामले में, मैं md5 का उपयोग कर रहा हूँ।
समस्याएं:
मैं इस नमक मूल्य के लिए एक विन्यास नहीं मिल रहा। ऐसा लगता है कि डेटाबेस में संग्रहीत पासवर्ड के भीतर पहले से मौजूद एक पर निर्भर है। क्या ऐसा कोई है या मुझे ऐसा करने के लिए AUTH को कॉन्फ़िगर करने की आवश्यकता है क्योंकि इस लॉगिन को पोर्टेबल और पुन: उत्पन्न करने की आवश्यकता है? यदि यह हैश_पासवर्ड रूटीन में नमक का पता नहीं लगा सकता है, तो यह uniqid() का उपयोग करने के लिए डिफ़ॉल्ट है, जो मुझे विश्वास नहीं है कि पोर्टेबल बिल्कुल है।
उपयोगकर्ताओं को जोड़ने के मामले में, क्या यह सुविधा जोड़ने के लिए ऑथ लाइब्रेरी को संशोधित करना समझ में आता है? यानी, अपना खुद का अनुकूलित एसएएलटी पेश करें जो मैं कह सकता हूं, उस पर एक एमडी 5 हैश करें और फिर एमडी 5 एसएम में दिए गए बिंदुओं पर पासवर्ड को नमक द्वारा उत्पन्न एमडी 5 का उपयोग करें?
मैं कोई सुरक्षा विशेषज्ञ नहीं हूं, लेकिन क्या यह अधिक है? अनुमोदित, यह किसी ऐसे व्यक्ति को रोकता है जो एमडी 5 पासवर्ड सूची तक पूर्व निर्धारित निर्धारित हैश के एमडी 5 लुकअप का उपयोग करने से रोकता है।
यदि आपने कोहाना PHP फ्रेमवर्क का उपयोग किया है, यदि आपके पास इसका उपयोग करने के बाद कोई सबक सीखा या अनुभव है जो इस समस्या के लिए सही दृष्टिकोण के रूप में अंतर्दृष्टि दे सकता है, तो मुझे बताएं। मैं इसके बारे में कई मंच और विकी पढ़ रहा हूं, और अभी तक एक वास्तविक ठोस राय नहीं है जिसे मैंने देखा है। मैं अनिवार्य रूप से इस साइट में किसी को प्रमाणित करने के लिए पुन: उत्पन्न करने की कोशिश कर रहा हूं, दोनों PHP का उपयोग करके और अंत में एक मोबाइल डिवाइस से, जैसे कि आईफोन। मैं अंततः ओपनआईडी समर्थन और एकीकरण के लिए Google मित्र कनेक्ट के लिए समर्थन जोड़ने का भी विचार कर रहा हूं।
नीचे रुचि के कार्यों से संबंधित कोहाना में औथ मॉड्यूल से स्निपेट हैं। उनके पास कुछ डिबगिंग है क्योंकि मैं यह समझने की कोशिश कर रहा हूं कि क्या हो रहा है।
public function login($username, $password, $remember = FALSE)
{
if (empty($password))
return FALSE;
if (is_string($password))
{
// Get the salt from the stored password
$salt = $this->find_salt($this->driver->password($username));
Kohana::log('debug', "--- Auth_Core login salt = $salt ");
Kohana::log('debug', "--- Auth_Core login pass = $password ");
// Create a hashed password using the salt from the stored password
$password = $this->hash_password($password, $salt);
}
Kohana::log('debug', "--- Auth_Core login pass_hash = $password ");
return $this->driver->login($username, $password, $remember);
}
public function find_salt($password)
{
$salt = '';
foreach ($this->config['salt_pattern'] as $i => $offset)
{
// Find salt characters, take a good long look...
//$salt .= $password[$offset + $i];
$salt .= substr($password, $offset + $i, 0);
}
return $salt;
}
public function hash_password($password, $salt = FALSE)
{
Kohana::log('debug', "--- Auth_Core Original Pass = $password ");
if ($salt === FALSE)
{
// Create a salt seed, same length as the number of offsets in the pattern
$salt = substr($this->hash(uniqid(NULL, TRUE)), 0, count($this->config['salt_pattern']));
Kohana::log('debug', "--- Auth_Core salt created = $salt ");
}
// Password hash that the salt will be inserted into
$hash = $this->hash($salt.$password);
// Change salt to an array
$salt = str_split($salt, 1);
// Returned password
$password = '';
// Used to calculate the length of splits
$last_offset = 0;
foreach ($this->config['salt_pattern'] as $offset)
{
// Split a new part of the hash off
$part = substr($hash, 0, $offset - $last_offset);
// Cut the current part out of the hash
$hash = substr($hash, $offset - $last_offset);
// Add the part to the password, appending the salt character
$password .= $part.array_shift($salt);
// Set the last offset to the current offset
$last_offset = $offset;
}
Kohana::log('debug', "--- Auth_Core hashpw = $password + $hash ");
// Return the password, with the remaining hash appended
return $password.$hash;
}
'find_salt() 'में, आप जानते हैं कि' substr (..., ..., 0) 'हमेशा खाली स्ट्रिंग वापस कर देगा? – Inshallah
हेहे याह, मैं पहले उस विधि को समायोजित कर रहा था और कल रात को देखा क्योंकि मैं "कोड के बहुत देर हो चुकी" के बिंदु तक पहुंच रहा था। एथ कोड में एक बग दिखाई दिया, हालांकि यदि उपयोगकर्ता नाम डेटाबेस में नहीं मिला था, तो पासवर्ड प्रॉपर्टी मौजूद नहीं होगी। इसके ऊपर टिप्पणी कोड मूल रूप से पढ़ा जाता है। जोड़ा गया कोड मूल रूप से 1 था, लेकिन स्पष्ट रूप से मुझे रात में देर से php doc को गलत तरीके से पढ़ना होगा, यह सोचकर कि यह कई बाइट्स लौटने के बजाय शुरुआती ऑफ़सेट था। धन्यवाद। अच्छी पकड़! – Gary
मुझे ब्राउजर में पासवर्ड और प्रमाणीकरण मिला। बेशक, मैं किस उत्तर को स्वीकार करता हूं? दोनों उत्तरों (लुकमैन और इंशाल्लाह) बहुत उपयोगी थे। एक बार फिर धन्यवाद। – Gary