2013-05-01 3 views
5

मैं डेटाबेस पर नमक के साथ एक PHP लॉगिन स्क्रिप्ट है, लेकिन मेरे रजिस्टर लिपि में मैं देख रहा हूँ:मैं अपनी लॉगिन स्क्रिप्ट में MD5 से अपनी सुरक्षा को कुछ और सुरक्षित कैसे अपडेट करूं?

$qry = "INSERT INTO accounts(username, firstname, lastname, password) " . 
VALUES('$username','$fname','$lname','" . md5($_POST['password']) . "')"; 

और प्रवेश के लिए:

$qry="SELECT * FROM accounts WHERE username='$username' AND password='" . 
md5($_POST['password']) . "'"; 

वहाँ कुछ कोड है कि MD5 की जगह ले सकता है ? कुछ और सुरक्षित है?

मैंने SHA1 या कुछ के बारे में सुना है।

+1

1. एक बाहरी ऑथ लाइब्रेरी का उपयोग करें 2. मौजूदा ऑथ का उपयोग करें .. ["php हैश पासवर्ड"] (http://stackoverflow.com/search) के लिए SO-search पर कई मौतें हैं। क्यू = php + हैश + पासवर्ड) और एक अच्छा पढ़ा है: एसक्यूएल इंजेक्शन; अनुचित हैश पसंद (SHA-1 या तो उपयुक्त नहीं है); कोई नमक नहीं (दावा किए जाने के बावजूद); अन्य मुद्दों कहीं और ..? – user2246674

+0

ive पढ़ें md5 अब भयानक है, sha256 और नमक का उल्लेख किया गया था, लेकिन मैं जो पोस्ट करता हूं उसे देखता हूं और कुछ शोध करता हूं। सही दिशा में बिंदु के लिए धन्यवाद श्रीमान। –

+1

MD5 का उपयोग पासवर्ड हैशिंग के लिए नहीं किया जाना चाहिए; लेकिन एसएचए -1 पर लागू क्यों नहीं होने का एक ही कारण है। [एमडी 5 हैशिंग अभी भी * संभवतः "अप्रशिक्षित" नहीं हो सकता है] (http://stackoverflow.com/a/13446272/2246674) - हालांकि, * एमडी 5 और एसएचए -1 दोनों ब्रूट-फोर्सिंग के लिए कमजोर हैं क्योंकि वे दोनों बहुत तेज़ हैं और समांतर * हो सकता है। नमक का उपयोग इंद्रधनुष तालिका के हमलों को रोक सकता है (और नमक का उपयोग नहीं करना इंद्रधनुष तालिका के हमलों की वजह से एक बेकार हैश पासवर्ड है), लेकिन यह ब्रूट फोर्स हमलों को रोक नहीं सकता है, यही कारण है कि SHA-1 इस विशेष कार्य के लिए MD5 से अधिक उपयुक्त * नहीं है। – user2246674

उत्तर

3

लघु जवाब

उपयोग bcrypt नहीं md5 या sha1

लंबे समय तक जवाब

का उपयोग करना crypt() कठिन है। एक नया पीएचपी पासवर्ड हैशिंग PHP संस्करण 5.5 में आने वाले एपीआई है, तो आप इसके बारे में यहाँ पढ़ सकते हैं:

https://gist.github.com/nikic/3707231

यह bcrypt उपयोग करता है और पूरी प्रक्रिया बहुत आसान बना देता है।

https://github.com/ircmaxell/password_compat

संपादित करें:: तो इस बीच में वहाँ एक पुस्तकालय अभी इस नई एपीआई प्रदान करना है बेशक php 5.5 नहीं अभी तक तैयार, है पर एक और अधिक पूरी तरह से जवाब के लिए इस सूत्र देखें विषय:

How do you use bcrypt for hashing passwords in PHP?

+0

तो मैं बस md5 को bcrypt के साथ स्वैप कर सकता हूं और इसे अपने आप अनुकूलित करना चाहिए? –

+0

@DxVermakaXeno नहीं, आप इसे केवल स्वैप नहीं कर सकते हैं। क्रिप्ट() पर PHP दस्तावेज़ पढ़ें जो मैंने ऊपर से लिंक किया है। और एसओ थ्रेड को पढ़ें जिसे मैंने अभी एक लिंक जोड़ा है, इसमें बहुत सारे उदाहरण कोड हैं। – jszobody

+0

नए पासवर्ड हैशिंग एपीआई के लिए [आरएफसी] (https://wiki.php.net/rfc/password_hash) पढ़ने का आनंद लिया। –

1

@jszbody पद के विचार में, आपको अपना पासवर्ड क्षेत्र आप योजना आप उपयोग कर रहे हैं बताने के लिए अद्यतन करना चाहिए।

जहां आपके पास अब MD5 हैश है, तो आपके पास "BAC232BC1334DE" या कुछ हो सकता है।

जब आप एसएचए या जो कुछ भी जाते हैं, तो आपको इसे बदलना चाहिए: "शा: आपकेशहर"।

क्योंकि आप अभी अपने मौजूदा पासवर्ड नहीं बदल सकते हैं। यह इसे और अधिक पिछड़ा संगत बनाएगा, क्योंकि अब आप दोनों योजनाओं का समर्थन कर सकते हैं।

चूंकि आपको लॉगिन के दौरान मूल पासवर्ड मिलता है, इसलिए आप लोग लॉगिन के रूप में अपने पासवर्ड को गतिशील रूप से अपग्रेड कर सकते हैं।

आपको अपना उपयोगकर्ता रिकॉर्ड प्राप्त होता है, पासवर्ड जांचें। यदि कोई योजना नहीं है, तो MD5 का उपयोग करें, और पासवर्ड की तुलना करें। अगर वे सही हैं (यानी वे लॉग इन कर सकते हैं), तो आप अपने पुराने एमडी 5 पासवर्ड को नए एसएचए पासवर्ड में अपडेट कर सकते हैं।

इसके अलावा, ऐसा लगता है कि आप अपने पासवर्ड को सलाम नहीं कर रहे हैं। आपको अपने पासवर्ड को नमक करना चाहिए ताकि जब मैरी सु अपने पासवर्ड के लिए "ilovekittens" का उपयोग करे, और बिग जेक महनी अपने पासवर्ड के रूप में "ilovekittens" का उपयोग करती है, तो आपको समान पासवर्ड के लिए समान नहीं मिलता है।

आप नमक को पासवर्ड में भी स्टोर कर सकते हैं: "SHA: RANDOMSALTCHARACTERS: YOURSALTEDHASHHERE"।

नमकीन की अत्यधिक अनुशंसा की जाती है। अनसुलझा, यह बहुत अधिक मायने रखता है कि आप किस योजना का उपयोग करते हैं।

+0

*** पासवर्ड हैश के लिए MD5 पर SHA-1 का उपयोग करने के लिए कोई लाभ नहीं है ***। इंद्रधनुष तालिकाओं और समय/अंतरिक्ष व्यापार के कारण सभी मामलों में एक अच्छा नमक मूल्य (या समतुल्य) का उपयोग किया जाना चाहिए या हैशिंग * बेकार * है - मैं इस प्रकार कहूंगा "नमक की आवश्यकता है।" – user2246674

0

निम्नलिखित वर्ग उपयोग करके देखें: द्वारा

include_once('passhash.class.php'); 

हैश पासवर्ड: निम्नलिखित के साथ अपने पृष्ठ में

<?php 
    class PassHash { 

     // blowfish 
     private static $algo = '$2a'; 

     // cost parameter 
     private static $cost = '$31'; 

     // mainly for internal use 
     public static function unique_salt() { 
      return substr(sha1(mt_rand()),0,22); 
     } 

     // this will be used to generate a hash 
     public static function hash($password) { 

      return crypt($password, 
         self::$algo . 
         self::$cost . 
         '$' . self::unique_salt()); 

     } 
     // this will be used to compare a password against a hash 
     public static function check_password($hash, $password) { 

      $full_salt = substr($hash, 0, 29); 

      $new_hash = crypt($password, $full_salt); 

      return ($hash == $new_hash); 

     } 

    } 

?> 

इसे शामिल

PassHash::hash("test"); 

और साथ यह जाँच करें:

if (PassHash::check_password($databasepassword, $formpassword)){ 
    // do stuff 
} 

यह फ़ंक्शन Blowfish एन्क्रिप्शन का उपयोग करता है। Blowfish goto के बारे में अधिक जानकारी के लिए PHP.net/crypt

ब्लॉफिश को पासवर्ड को एन्क्रिप्ट करने का सबसे प्रभावी अभी तक का सबसे शक्तिशाली तरीका माना जाता है। नमक का उपयोग किए बिना MD5 या SHA1 का उपयोग न करें!

+0

एमडी 5 या SHA1 का उपयोग न करें (इसके लिए) बिल्कुल! – user2246674

+0

हालांकि, मैं सहमत हूं। छोटी सुरक्षा दिखने वाली प्रणालियों के लिए आप नमक के साथ एमडी 5 का उपयोग कर सकते हैं। जब तक आप नमक को अपने httpd dir से दूर रखें। अन्यथा मैं अभी भी नहीं देखता कि आपको एमडी 5 का उपयोग क्यों नहीं करना चाहिए। चूंकि यह उलट नहीं है ... –

+0

* न तो * एमडी 5 और न ही SHA1 उपयुक्त हैं (नमक के साथ या बिना) क्योंकि वे * क्रूर-मजबूर * हो सकते हैं। मुख्य पोस्ट पर मेरी टिप्पणियां देखें। मैं पूरी तरह से bcrypt (जैसा दिखाया गया है) का उपयोग करने के साथ सहमत हूं क्योंकि यह क्रूर बल के हमलों के लिए प्रतिरोधी है। (यह जवाब एक * अच्छा * नमक उत्पादन समारोह भी दिखाता है।) – user2246674

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