2009-02-20 13 views
26

प्रति प्रश्न के रूप में, यह सुरक्षित ऐसेक्या php चर या php निरंतर में सादे पाठ में पासवर्ड स्टोर करना ठीक है?

$password = 'pa$$w0rd'; 

उपयोगकर्ताओं के लिए यह नहीं देख सकते हैं, यह सुरक्षित है के रूप में php पृष्ठों पर पासवर्ड स्टोर करने के लिए, सही है?

संपादित करें: कुछ लोगों ने वास्तव में हैश का उपयोग करने का सुझाव दिया है, हालांकि, डेटाबेस सर्वर कनेक्शन पासवर्ड में कोई समस्या होगी, है ना?

उत्तर

31

संक्षिप्त उत्तर दोनों नहीं है, और यह निर्भर करता है।

यह लगभग एक अच्छा विचार है, सादा पाठ में पासवर्ड स्टोर करने के लिए, विशेष रूप से एक वेब सुलभ स्थान में अगर एक साधारण सर्वर गलत कॉन्फ़िगरेशन से कोई अन्य कारण या गलत जगह पर एक गूंज के लिए दुनिया के लिए उसे बेनकाब कर सकता है कभी नहीं है।

आप चाहिए एक पासवर्ड, (जो संभव है) आप webroot बाहर यह स्टोर करने के लिए कोशिश कर सकते, जैसे /var/www/public_html/ स्टोर यदि आपका codez यहाँ रखो
/var/www/includes/ अपने पासवर्ड यहाँ

है कि तुलना में और भी बेहतर रखो होगा सिस्टम के लिए जिसकी आपको पासवर्ड चाहिए (उदाहरण के लिए डेटाबेस रैपर) पहले से ही एक ऑब्जेक्ट लौटाता है। तो $databasepassword के लिए पूछने के बजाय आप पीडीओ ऑब्जेक्ट के लिए पूछते हैं, और अपने डेटाबेस कक्षाओं को वेबूट के बाहर स्टोर करते हैं।

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

इसके अलावा, अगर यह आपके सुपर-सेकिट ग्राहक सामग्री के लिए पासवर्ड है, तो, आप जो कुछ खो चुके हैं वह कुछ सदस्यता शुल्क है, यदि आपका डेटाबेस है, तो आपको कोई समस्या हो सकती है, अगर यह आपका ऑनलाइन बैंकिंग विवरण है, तो अच्छा तुम्हारे लिए।

पासवर्ड की सुरक्षा कितनी मूल्यवान है?

+0

डेटाबेस सर्वर के प्रमाणीकरण के दौरान नहीं होगा, सादे टेक्स्ट में पासवर्ड टीसीपी/आईपी पर भेजा जाता है? –

+1

अधिकांश साझा होस्टिंग में स्थानीय डेटाबेस केवल लूपबैक पर चल रहा है, इसलिए वास्तव में कोई समस्या नहीं है। यदि आप साझा होस्टिंग पर नहीं हैं, तो संभवतः फाइल सिस्टम एक्सेस इत्यादि के बारे में चिंता करने के लिए कम सुरक्षा समस्याएं हैं। – garrow

+1

हालांकि कई साइटों पर एक ही पासवर्ड का उपयोग न करने की दृढ़ता से अनुशंसा की जाती है, फिर भी कई लोग इसे वैसे भी करेंगे। यदि आपके उपयोगकर्ताओं के पासवर्ड प्रकट होते हैं, तो उनकी सुरक्षा/गोपनीयता को अन्य अनुप्रयोगों में भी समझौता किया जा सकता है। – felixbade

0

जब तक कि साइट पर समझौता नहीं किया जाता है और अब उन सभी चीजें हैं जो पासवर्ड आपके पास पहुंच प्रदान करते हैं (आपका डीबी, शायद?)।

0

यह निर्भर करता है कि आप 'सुरक्षित' को कैसे परिभाषित करते हैं।

आप सही हैं कि एक सामान्य उपयोगकर्ता इसे नहीं देख पाएगा।

हालांकि यह निश्चित रूप से एक बुरा अभ्यास है; अगर आपकी साइट पर समझौता किया गया है, तो ये पासवर्ड किस तक पहुंच देंगे? मैं कम से कम कहूंगा कि आपको पासवर्ड का हैश स्टोर करना चाहिए, सादे पाठ नहीं।

+0

यदि आपके पास केवल पासवर्ड का हैश है तो आप डेटाबेस से कैसे कनेक्ट होते हैं? – Piskvor

+0

हाँ - यदि पासवर्ड डेटाबेस कनेक्शन के लिए है (ओपी यह नहीं बताता है) तो यह मुश्किल है – DanSingerman

6

आमतौर पर वे इसे नहीं देख सकते हैं। लेकिन अगर सर्वर पर कुछ बुरा होता है तो बड़ी संभावना है कि सर्वर आपके PHP कोड को सादा पाठ में वापस कर देगा/इसे निष्पादित करेगा और इसलिए उपयोगकर्ता उस फ़ाइल के सभी स्रोत और आपका पासवर्ड भी देखेंगे।

मैं कहीं भी पासवर्ड संग्रहीत करता हूं जहां यह दस्तावेज़ रूट पर नहीं है (ब्राउज़र में खुला नहीं हो सकता है) और फिर उस फ़ाइल को php के साथ खोलें और सामग्री (पासवर्ड) पढ़ें। या यदि आपके पास एकाधिक पासवर्ड/उपयोगकर्ता हैं, तो मैं उन्हें तेजी से पहुंच के लिए डेटाबेस में संग्रहीत करूंगा।

आप फ़ाइल विधि निर्देशिका लेआउट का उपयोग करने कुछ इस तरह देखना चाहिए चाहते हैं (सर्वर पर depneds)

/public_html/index.php

$myFile = $_SERVER['DOCUMENT_ROOT'] + "/../password.txt"; 
if file_exists($myFile) { 
    $fh = fopen($myFile, 'r'); 
    $password = fgets($fh); 
    fclose($fh); 
} else die("No password file"); 
if ($user_input == $password) { 
    ...... Authentication succeeded .......... 
    ......your relatively protected code ..... 
} else die("Wrong password"); 
/password.txt

यदि आप उस टेक्स्ट फ़ाइल में टेक्स्ट को संग्रहीत करने के बजाय पासवर्ड को और अधिक सुरक्षा चाहते हैं। गले में यह हैश है और फिर आप उपयोगकर्ता इनपुट के साथ तुलना करना उपयोगकर्ता इनपुट से हैश पैदा करते हैं और पासवर्ड के हैश की तुलना आप पाठ फ़ाइल से लोड चाहते हैं जब

sha1($user_input) == $password_from_txt 
+0

वाह, मैं भूल गया था कि मैंने PHP प्रश्नों का उत्तर दिया था। लगभग 6 साल बाद एक टिप्पणी को डाउनवोट देखने के लिए अभी भी दिलचस्प है। इसके अलावा, गीज़, दुनिया फिर वापस इतना अलग था। –

2

जब तक आपके पीएचपी स्थापना एकदम सही ढंग से काम करता है, यह किसी भी अन्य विधि से कम सुरक्षित नहीं है। मैं परिवर्तनीय पर स्थिर (परिभाषित) नाम पसंद करेंगे। इसके अतिरिक्त आप सादे पासवर्ड की बजाय पासवर्ड के हैश को संग्रहीत करने पर विचार कर सकते हैं। यह साइट से समझौता होने पर भी आपके पासवर्ड चोरी करने से रोकता है।

खराब अभ्यास होने के नाते, यह निर्भर करता है। यदि आपको केवल एक पासवर्ड स्टोर करने की आवश्यकता है, तो यह दृष्टिकोण ठीक है। दस्तावेज़ रूट के बाहर उन्हें संग्रहीत करने से अतिरिक्त सुरक्षा की झूठी भावना हो सकती है; दस्तावेज़ रूट सर्वर की किसी अन्य सेटिंग से अधिक पूर्ण नहीं है।

+2

मैंने साइट को सादा पाठ के रूप में PHP स्रोत को डंपिंग देखा है। यदि ऐसा होता है और फ़ाइल दस्तावेज़ रूट के बाहर है, भले ही सभी जानते हैं कि फ़ाइल स्रोत से कहां है, तो वे ब्रोसर से "बस" इसे एक्सेस नहीं कर सकते हैं। –

+0

मैं डॉक्रोट के बाहर चीजों को संग्रहित करने के विचार को समझता हूं, और शायद यह कुछ सुरक्षा जोड़ता है, लेकिन मुझे लगता है कि यह अतिरंजित है। यदि साइट PHP स्रोत को डंप करती है, तो यह बुरी तरह टूट जाती है। और यदि यह टूटा हुआ है, तो डॉक्रूट हमारी इच्छा से कुछ और भी हो सकता है - उदाहरण के लिए/ –

+1

वेबूट के बाहर सामान संग्रहीत करना कोई पैनसिया नहीं है, आप केवल वेरिएंट को प्रिंट नहीं कर सकते हैं। लेकिन यह आपको एक अलगाव देता है जिसे आप अपने कोड, कक्षाओं और इनिट में बाहर कर सकते हैं, वेबूट के बाहर जाते हैं, प्रेजेंटेशन कोड वेबूट के अंदर जाता है। – garrow

10

आप सुरक्षित परिभाषित करने के तरीके के आधार पर, किसी भी दृष्टिकोण के सकारात्मक और नकारात्मक पहलू हैं।

फ़ाइल:: config.php

if(! defined('IN_CODE')) die('Hacking attempt'); 

define('PASSWORD_HASH', '098f6bcd4621d373cade4e832627b4f6'); 

फ़ाइल: index.php

तुम सच में अपने स्रोत में एक पासवर्ड संग्रहीत करना चाहते हैं, तो यह एक तरह से कुछ करने के लिए एक अच्छा विचार हो सकता है

define('IN_CODE', '1'); 

include('passwd.php'); 

if(md5($password) == PASSWORD_HASH) 
... 

सादा-पाठ में एक अच्छा विचार नहीं है, हमेशा के लिए पासवर्ड आप संग्रहीत करना चाहते हैं की एक हैश की दुकान।

इसके अलावा, अपने मुख्य स्रोत फ़ाइल से इस तरह परिभाषित करने का प्रयास करें।

0

कभी-कभी इसे केवल f.e. होना चाहिए। एक मेल एप्लिकेशन के लिए जहां आप केवल सादा पासवर्ड के साथ लॉगिन कर सकते हैं, न कि हैश के साथ। और यदि आपके आवेदन में सुरक्षा समस्याएं नहीं हैं तो इससे आपको प्रभावित नहीं होना चाहिए।

0

मुझे विश्वास है कि ज्यादातर बार सादा पाठ पासवर्ड MySQL के रूप में डेटाबेस पासवर्ड होगा, exmaple के लिए, प्रमाणीकरण के लिए हैश स्वीकार नहीं करेगा।

जैसा कि सबसे अच्छा समाधान है, PHP कॉन्फ़िगरेशन फ़ाइल को वेबूट के बाहर पासवर्ड के साथ रखना है।

यदि आप चिंतित हैं कि फ़ाइल देखने के दौरान कोई व्यक्ति आपका पासवर्ड देख सकता है तो आप बेस 64 funciton का उपयोग करके इसे मानव के लिए अपठनीय बना सकते हैं।

विवरण के लिए this post और विंडोज, लिनक्स और मैक के लिए भी छोटी उपयोगिता देखें जो इसे आसान बनाता है।

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