security - Rails has_secure_password: is it actually hashing the password in the DB? -
has_secure_password के साथ विशिष्ट रेल 4.1 ऐप का उपयोग कर और
उपयोगकर्ता मॉडल में है डीबी में एक
password_digest कॉलम जब मैं एक नया उपयोगकर्ता बनाऊँ, तो मैं अब भी कंसोल में सादा पाठ का उपयोग कर सकता हूं:
# rails console & gt; यू = यूज़र। न्यू (ईमेल: "test@test.com", पासवर्ड: "पासवर्ड") & gt; u.save & gt; u.password = & gt; "पासवर्ड" & gt; u.password_digest = & gt; "Xjdk ..." हालांकि, जब मैं कंसोल सत्र को बंद करता हूं और एक नया प्रारंभ करता हूं, तब मैं सादा पाठ प्राप्त नहीं कर सकता:
# कंसोल सत्र के ऊपर बंद करें और एक नया खाता खोलें & gt; u = User.find_by (ईमेल: "test@test.com") & gt; u.password = & gt; शून्य मैं मान रहा हूँ कि सादा पाठ पासवर्ड केवल पहले स्थिति में ही पुनर्प्राप्त करने योग्य है क्योंकि यह स्मृति में संग्रहीत किया जा रहा है और जब मैं कॉल करता हूं u.password = & gt; "पासवर्ड" यह मेमोरी से मान पुनर्प्राप्त कर रहा है, डाटाबेस नहीं है।
मैंने हमेशा सोचा था कि has_secure_password को एक हैश के रूप में (नमक + पासवर्ड) संग्रहीत किया जाता है I सोचा था कि यह सैद्धांतिक रूप से असंभव था (यदि मैं उस शब्दावली का उपयोग कर सकता हूं) को password_digest रिवर्स करने के लिए और मूल पासवर्ड प्राप्त कर सकता हूं।
मैं बस यह सुनिश्चित कर रहा हूं कि मेरा मानना है कि पासवर्ड एक असली हैश (यानी, मूल पासवर्ड पुनः प्राप्त नहीं कर सकता) के रूप में संग्रहीत है मान्य है। मैंने पढ़ा है, लेकिन उसने मेरे सवाल को स्पष्ट नहीं किया।
आप सही हैं ??? ? डीबी केवल हैहेड पासवर्ड सहेज रहा है, न कि खुद पासवर्ड। आप डेटाबेस को सीधे read_attribute पद्धति () का उपयोग करके इसकी पुष्टि कर सकते हैं:
& gt; यू = उपयोगकर्ता.न्यू एक ?? | & gt; u.read_attribute (: password_digest) = & gt; # कुछ हैश & gt; u.read_attribute (: पासवर्ड) = & gt; संयोग से, यह भी सुनिश्चित कर लें कि आपका उपयोगकर्ता मॉडल नहीं में पासवर्ड कॉलम है । अन्यथा यह पासवर्ड को हैशिंग के उद्देश्य से सीधे पासवर्ड को बचाएगा।
Comments
Post a Comment