PHP में डेटाबेस पासवर्ड कैसे सुरक्षित करें?


404

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


1
पूरी तरह से सुरक्षित होने के लिए, आपको एक ssl कनेक्शन सेट करना होगा, अन्यथा आपके नेटवर्क पर कोई भी अभी भी आपके द्वारा टाइप किए गए पासवर्ड को सूँघ सकता है।
चार्ल्स मा

1
क्या आप उपयोगकर्ता पासवर्ड या कनेक्शन स्ट्रिंग में उपयोग किए जाने वाले डेटाबेस पासवर्ड का मतलब है?
ओजगुर Ozcitak

4
कनेक्शन स्ट्रिंग में प्रयुक्त डेटाबेस पासवर्ड। धन्यवाद!
user18359

जवाबों:


238

कई लोग इसे एक डेटाबेस में पासवर्ड स्टोर करने के तरीके के बारे में एक सवाल के रूप में फैलाते हैं । यह गलत है। यह कैसे पासवर्ड आप प्राप्त करने देता है कि स्टोर करने के लिए के बारे में है के लिए डेटाबेस।

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


8
धन्यवाद। यदि मैं इसे सही ढंग से समझता हूं, तो php फ़ाइल में फिर से कॉन्फ़िगर फ़ाइल शामिल होगी, जिससे वह पासवर्ड का उपयोग कर सके। उदाहरण के लिए, मैं 'app1_db_cfg.php' नामक एक फ़ाइल बनाता हूं जो लॉगिन, पॉवर्ड और डीबी नाम को संग्रहीत करता है। तब मेरे एप्लिकेशन.php पेज में 'app1_db_cfg.php' शामिल है और मैं व्यवसाय में हूं!
user18359

28
मैं सहमत हूं कि कॉन्फिग को ठीक से संरक्षित करने की आवश्यकता है। हालाँकि यह जानना कि कैसे करना है, सिस्टम एडमिनिस्ट्रेटर का व्यवसाय है, डेवलपर्स का नहीं। मैं इस मामले में मजबूत एन्क्रिप्शन के मूल्य पर असहमत हूं। यदि आप अपनी कॉन्फ़िग फ़ाइल की सुरक्षा नहीं कर सकते हैं, तो आपको क्या लगता है कि आप अपनी कुंजियों की सुरक्षा कर सकते हैं?
user11318

10
मैं एक डेटाबेस खाते का उपयोग करना पसंद करता हूं जो केवल वेब सर्वर से डेटाबेस को प्राप्त करने की अनुमति है। और फिर मैं कॉन्फ़िगरेशन को एन्क्रिप्ट करने से परेशान नहीं हूं, मैं इसे वेब रूट के बाहर स्टोर करता हूं।
gnud

11
मैं पथ सेट करने के लिए एक अपाचे पर्यावरण चर का उपयोग करता हूं ताकि स्रोत कोड में फ़ाइल का पथ भी अज्ञात हो। यह भी अच्छी तरह से अपाचे सेटिंग्स सर्वर पर कर रहे हैं के आधार पर विकास और उत्पादन के लिए एक अलग पासवर्ड होने की अनुमति देता है
गिडव

15
कृपया ध्यान रखें कि वेब एक्सेस डायरेक्टरी के बाहर संग्रहीत फ़ाइलों को भी उस स्क्रिप्ट द्वारा पढ़ा जाना चाहिए जो उनका उपयोग करता है। यदि कोई उस फ़ाइल को शामिल करता है, तो फ़ाइल से डेटा डंप करता है, उन्हें पासवर्ड दिखाई देगा।
रिक मैक गिलिस

104

यदि आप किसी और के सर्वर पर होस्ट कर रहे हैं और आपके वेबरूट के बाहर एक्सेस नहीं है, तो आप हमेशा अपना पासवर्ड और / या डेटाबेस कनेक्शन किसी फ़ाइल में रख सकते हैं और फिर .htaccess का उपयोग करके फ़ाइल को लॉक कर सकते हैं:

<files mypasswdfile>
order allow,deny
deny from all
</files>

3
धन्यवाद, वह वही था जिसकी मुझे तलाश थी।
डेविड ग्लैडफेल्टर

28
निश्चित रूप से, लेकिन अगर किसी के पास शेल एक्सेस है, तो आपके पूरे खाते को वैसे भी समझौता किया गया है।
केलन

4
यह बुरा अभ्यास है क्योंकि आप गलती से एक रिपॉजिटरी के लिए अपनी साख बना सकते हैं।
पोर्यून

2
@Ankit: यदि किसी गैर-मित्र के लिए सर्वर पर फ़ाइल अपलोड करना और उसे निष्पादित करना संभव है, तो सर्वर ठीक से कॉन्फ़िगर नहीं किया गया है।
केलीन

6
@Porlune: डेवलपर्स को अपने संस्करण नियंत्रण प्रणाली को एक .gitignore का उपयोग करके पासवर्ड फ़ाइल को अनदेखा करना चाहिए। लेकिन हां, उन फाइलों के साथ सावधानी बरती जानी चाहिए जिनमें संवेदनशील डेटा होता है।
kellen

45

सबसे सुरक्षित तरीका अपने PHP कोड में निर्दिष्ट जानकारी बिल्कुल भी नहीं है।

यदि आप अपाचे का उपयोग कर रहे हैं, तो इसका मतलब है कि आपके httpd.conf या वर्चुअल होस्ट फ़ाइल फ़ाइल में कनेक्शन विवरण सेट करें। यदि आप ऐसा करते हैं कि आप mysql_connect () को बिना किसी पैरामीटर के कह सकते हैं, जिसका अर्थ है कि PHP कभी भी आपकी जानकारी को आउटपुट नहीं करेगी।

यह आप उन फ़ाइलों में इन मानों को निर्दिष्ट करते हैं:

php_value mysql.default.user      myusername
php_value mysql.default.password  mypassword
php_value mysql.default.host      server

फिर आप इस तरह अपना mysql कनेक्शन खोलें:

<?php
$db = mysqli_connect();

या इस तरह:

<?php
$db = mysqli_connect(ini_get("mysql.default.user"),
                     ini_get("mysql.default.password"),
                     ini_get("mysql.default.host"));

1
कृपया ini_get ('डिफ़ॉल्ट मान') के उचित मानों की जाँच करें php.net/manual/en/class.mysqli.php
Val

4
हां, लेकिन कोई भी उपयोगकर्ता (या बुरी तरह से लिखित php स्क्रिप्ट का दुरुपयोग करने वाला हैकर) पासवर्ड को पढ़ सकता है ini_get()
Marki555

1
@ Marki555 but any user (or a hacker abusing badly written php script) can read the password via ini_get()आप इससे कैसे निपटते हैं ?
टनिक्स

2
Marki555 कह रहा है कि एक हमलावर जो PHP कोड चला सकता है, उसे PHP फ़ंक्शन भी कह सकते हैं, जो स्पष्ट रूप से सच है और जिसके बारे में कुछ करना असंभव है। मैं यह भी जोड़ना चाहूंगा कि मैं स्वयं इस उत्तर में दी गई सलाह का पालन नहीं करता, बल्कि पर्यावरण चर का उपयोग करता हूं। हालांकि यह अवधारणा समान है: अपने क्रेडेंशियल्स को कोड में संग्रहीत न करें, लेकिन उन्हें किसी तरह इंजेक्ट करें। यह वास्तव में कोई फर्क नहीं पड़ता अगर आप का उपयोग करें ini_get()या getenv()
लार्स निस्ट्राम

2
@DeepBlue यदि आप ini_get () इंजेक्षन कर सकते हैं तो आप file_get_contents (anypath) को भी इंजेक्ट कर सकते हैं। जब तक php के पास पासवर्ड प्राप्त करने का एक तरीका है, तो कोई भी दुर्भावनापूर्ण कोड होगा।
वार्सा

40

उन्हें वेब रूट के बाहर एक फ़ाइल में संग्रहीत करें।


29
और भी, जैसा कि कहीं और उल्लेख किया गया है, स्रोत नियंत्रण के बाहर।
फ्रैंक किसान

6
हम इसे शामिल करने में सक्षम होंगे? उदाहरण के लिए PHP में हम कर सकते हैं include('../otherDirectory/configfile.conf')?
mtk

1
आप सभी wwwroot के बाहर क्रेडेंशियल्स स्टोर करने का सुझाव दे रहे हैं। ठीक है, मैं सुरक्षा पृष्ठभूमि को समझता हूं। लेकिन फिर इसे संस्करण नियंत्रण (नमूना कॉन्फ़िगरेशन) में कैसे संग्रहीत किया जाना चाहिए? आमतौर पर wwwroot git रेपो की जड़ है, इसलिए अगर बाहर कुछ भी है - यह वीसी के बाहर होगा। नए डेवलपर की कल्पना करें कि वह विकास के लिए एक स्थानीय उदाहरण स्थापित करने की कोशिश कर रहा है - उसे "इस फाइल को लेना, इसे बाहर से कॉपी करना और भरना" जैसे जादू को कैसे जानना चाहिए?
द गॉडफादर

@ TheGodfather यह विचार है कि एक नए डेवलपर के पास अपने स्वयं के विकास पर्यावरण के लिए अपनी साख होनी चाहिए। यद्यपि कोड में निर्देशों या टिप्पणियों के साथ रीडमी होना एक अच्छा अभ्यास है, यह दर्शाता है कि आपको इसे कैसे कॉन्फ़िगर करना चाहिए (लेकिन वास्तविक डेटा नहीं)।
फोनिक्स

@ TheGodfather, readme फ़ाइल?
पचेरियर

35

अत्यंत सुरक्षित प्रणालियों के लिए हम एक विन्यास फाइल में डेटाबेस पासवर्ड को एन्क्रिप्ट करते हैं (जो कि सिस्टम प्रशासक द्वारा सुरक्षित किया जाता है)। एप्लिकेशन / सर्वर स्टार्टअप पर एप्लिकेशन तब डिक्रिप्शन कुंजी के लिए सिस्टम प्रशासक को संकेत देता है। डेटाबेस पासवर्ड तब कॉन्फिगर फाइल से पढ़ा जाता है, डिक्रिप्ट किया जाता है, और भविष्य में उपयोग के लिए मेमोरी में स्टोर किया जाता है। अभी भी 100% सुरक्षित नहीं है क्योंकि यह मेमोरी डिक्रिप्टेड में संग्रहीत है, लेकिन आपको इसे किसी बिंदु पर 'सिक्योर पर्याप्त' कहना होगा!


85
क्या होगा अगर व्यवस्थापक मर जाता है?
रादु मर्जिया

36
@RaduMurzea जो हास्यास्पद है। जब आप Sys Admins के मरने के बारे में सुना है? वे मैकडॉनल्ड्स की तरह हैं, वे कहीं से भी दिखाई देते हैं / गायब हो जाते हैं!
ILikeTacos

13
@Radu Murzea बस 2 या अधिक व्यवस्थापक हैं, तो आपके पास एक छापे सरणी की तरह समता है। एक समय में एक से अधिक ड्राइव विफल होने की संभावना बहुत कम है।
तत्व 11

5
सर्वर के पुनरारंभ होने पर क्या होगा? पासवर्ड को टाइप करने के लिए उन्हें प्राप्त करने के लिए एडमिन को जगाने में लगने वाले समय के बारे में क्या है ..etc.etc। लोल
जॉन हंट

1
यकीन नहीं होता कि 'मेमोरी में संग्रहीत' से आपका क्या मतलब है। पृष्ठ देखने के लिए किसी व्यक्ति के अनुरोध का जवाब देने में लगने वाले समय की तुलना में PHP वेब ऐप्स आमतौर पर मेमोरी में कुछ भी स्टोर नहीं करते हैं।
bdsl

15

यह समाधान सामान्य है, इसमें यह खुले और बंद स्रोत अनुप्रयोगों के लिए उपयोगी है।

  1. अपने एप्लिकेशन के लिए एक OS उपयोगकर्ता बनाएं। Http://en.wikipedia.org/wiki/Principle_of_least_privilege देखें
  2. पासवर्ड के साथ उस उपयोगकर्ता के लिए एक गैर-सत्र) ओएस पर्यावरण चर बनाएं
  3. एप्लिकेशन को उस उपयोगकर्ता के रूप में चलाएं

लाभ:

  1. आप अपने पासवर्ड को दुर्घटना द्वारा स्रोत नियंत्रण में नहीं देखेंगे, क्योंकि आप ऐसा नहीं कर सकते
  2. आप गलती से फ़ाइल की अनुमति नहीं देंगे। ठीक है, आप कर सकते हैं, लेकिन यह इसे प्रभावित नहीं करेगा।
  3. केवल मूल या उस उपयोगकर्ता द्वारा पढ़ा जा सकता है। रूट वैसे भी आपकी सभी फाइलों और एन्क्रिप्शन कुंजियों को पढ़ सकता है।
  4. यदि आप एन्क्रिप्शन का उपयोग करते हैं, तो आप कुंजी को सुरक्षित रूप से कैसे संग्रहीत कर रहे हैं?
  5. एक्स-प्लेटफॉर्म पर काम करता है
  6. अनिर्धारित बाल प्रक्रियाओं के लिए एनवार को पारित नहीं करना सुनिश्चित करें

यह विधि हेरोकू द्वारा सुझाई गई है, जो बहुत सफल हैं।


11

यदि डेटाबेस कनेक्शन को उसी फ़ाइल में बनाना संभव है, जहां क्रेडेंशियल्स संग्रहीत हैं। कनेक्ट स्टेटमेंट में क्रेडेंशियल्स को इनलाइन करें।

mysql_connect("localhost", "me", "mypass");

अन्यथा कनेक्ट स्टेटमेंट के बाद क्रेडेंशियल्स को परेशान करना सबसे अच्छा है, क्योंकि क्रेडेंशियल्स जो मेमोरी में नहीं हैं, मेमोरी के साथ नहीं पढ़ सकते हैं ;)

include("/outside-webroot/db_settings.php");  
mysql_connect("localhost", $db_user, $db_pass);  
unset ($db_user, $db_pass);  

9
यदि किसी के पास मेमोरी है, तो आप वैसे भी खराब हो सकते हैं। यह व्यर्थ नकली-सुरक्षा है। Webroot के बाहर (या यदि आपके webroot के ऊपर एक्सेस न हो तो .htaccess द्वारा कम से कम संरक्षित) एकमात्र सुरक्षित विकल्प है।
ulvitness

2
@uliwitness - यह कहने जैसा है कि सिर्फ इसलिए कि कोई आपके नेटवर्क ऑपरेशन सेंटर के लॉक को एसिटिलीन टॉर्च के साथ काट सकता है, इसका मतलब है कि दरवाजा नकली सुरक्षा भी है। संवेदनशील जानकारी को हमेशा संभव दायरे में बनाए रखने से समझ में आता है।
ल्यूक ए। लेबर

1
इको $ db_user या $ db_pass को कैसे प्रिंट करें? यहां तक ​​कि एक ही टीम के डेवलपर्स को उत्पादन क्रेडेंशियल्स का पता लगाने में सक्षम नहीं होना चाहिए। कोड में लॉगिन जानकारी के बारे में कुछ भी प्रिंट करने योग्य नहीं होना चाहिए।
मोहम्मद जोरेद

8

आपकी पसंद सीमित है क्योंकि आप कहते हैं कि आपको डेटाबेस तक पहुँचने के लिए पासवर्ड की आवश्यकता है। एक सामान्य दृष्टिकोण मुख्य स्क्रिप्ट के बजाय एक अलग कॉन्फ़िगरेशन फ़ाइल में उपयोगकर्ता नाम और पासवर्ड संग्रहीत करना है। फिर मुख्य वेब ट्री के बाहर स्टोर करना सुनिश्चित करें। अगर वहाँ एक वेब कॉन्फ़िगरेशन समस्या है जो आपकी php फ़ाइलों को केवल पाठ के रूप में प्रदर्शित होने के बजाय निष्पादित किया जा रहा है, तो आपने पासवर्ड को उजागर नहीं किया है।

इसके अलावा आप उपयोग किए जा रहे खाते के लिए न्यूनतम पहुंच के साथ सही लाइनों पर हैं। उसमें जोड़ें

  • किसी अन्य चीज़ के लिए उपयोगकर्ता नाम / पासवर्ड के संयोजन का उपयोग न करें
  • डेटाबेस सर्वर को केवल उस उपयोगकर्ता के लिए वेब होस्ट से कनेक्शन स्वीकार करने के लिए कॉन्फ़िगर करें (लोकलहोस्ट तब भी बेहतर है जब डीबी एक ही मशीन पर हो) इस तरह भले ही क्रेडेंशियल सामने आए हों जब तक वे किसी के लिए कोई उपयोग नहीं करते हैं जब तक कि उनके पास अन्य पहुंच न हो। मशीन।
  • पासवर्ड को रोकें (यहां तक ​​कि ROT13 भी) यह बहुत रक्षा नहीं करेगा यदि कुछ को फ़ाइल तक पहुंच प्राप्त होती है, लेकिन कम से कम यह इसके आकस्मिक देखने को रोक देगा।

पीटर


8

यदि आप PostgreSQL का उपयोग कर रहे हैं, तो यह ~/.pgpassपासवर्ड के लिए स्वचालित रूप से दिखता है । अधिक जानकारी के लिए मैनुअल देखें ।


8

पहले हमने डीबी उपयोगकर्ता को एक कॉन्फ़िगरेशन फ़ाइल में संग्रहीत किया था, लेकिन हिट पैरानॉयड मोड के बाद से - गहराई में रक्षा की नीति को अपनाना ।

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

हमने Apache VirtualHost में सेट किए गए पर्यावरण चर में उपयोगकर्ता / पासिंग स्टोर करने के लिए स्विच किया है। यह कॉन्फ़िगरेशन केवल रूट द्वारा पठनीय है - उम्मीद है कि आपका Apache उपयोगकर्ता रूट के रूप में नहीं चल रहा है।

इस के साथ यह है कि अब पासवर्ड एक वैश्विक PHP चर में है।

इस जोखिम को कम करने के लिए हमारे पास निम्नलिखित सावधानियां हैं:

  • पासवर्ड एन्क्रिप्ट किया गया है। हम पासवर्ड को डिक्रिप्ट करने के लिए तर्क को शामिल करने के लिए पीडीओ वर्ग का विस्तार करते हैं। यदि कोई उस कोड को पढ़ता है जहां हम कनेक्शन स्थापित करते हैं, तो यह स्पष्ट नहीं होगा कि कनेक्शन एक एन्क्रिप्टेड पासवर्ड के साथ स्थापित किया जा रहा है और पासवर्ड ही नहीं।
  • एन्क्रिप्ट किए गए पासवर्ड को वैश्विक चर से एक निजी चर में ले जाया जाता है । यह अनुप्रयोग तुरंत उस विंडो को कम करने के लिए करता है जो मान वैश्विक स्थान में उपलब्ध है।
  • phpinfo()अक्षम है। PHPInfo पर्यावरण चर सहित हर चीज का अवलोकन प्राप्त करने के लिए एक आसान लक्ष्य है।

6

डेटाबेस पासवर्ड को एक फाइल में रखें, इसे केवल फाइल की सेवा करने वाले उपयोगकर्ता के लिए पढ़ें।

जब तक आपके पास डेटाबेस तक पहुँचने के लिए केवल php सर्वर प्रक्रिया की अनुमति देने के कुछ साधन नहीं हैं, यह बहुत अधिक है जो आप कर सकते हैं।


5

यदि आप डेटाबेस पासवर्ड के बारे में बात कर रहे हैं, जैसा कि ब्राउज़र से आने वाले पासवर्ड के विपरीत है, तो मानक अभ्यास डेटाबेस पासवर्ड को सर्वर पर एक PHP कॉन्फिगर फाइल में डालने के लिए लगता है।

आपको बस यह सुनिश्चित करने की आवश्यकता है कि पासवर्ड वाली php फ़ाइल पर उपयुक्त अनुमति है। यानी यह केवल वेब सर्वर और आपके उपयोगकर्ता खाते द्वारा पठनीय होना चाहिए।


1
दुर्भाग्य से PHP कॉन्फिगर फाइल को phpinfo () द्वारा पढ़ा जा सकता है और यदि कोई ऐसा होता है जो भाग्यशाली हमलावर के पीछे कुछ टेस्ट स्क्रिप्ट छोड़ देता है तो वह पासवर्ड पढ़ सकता है। संभवतः इसके बजाय वेब सर्वर रूट के बाहर किसी फ़ाइल में कनेक्शन पासवर्ड छोड़ना सबसे अच्छा है। तब इसे एक्सेस करने का एकमात्र तरीका या तो एक शेल के साथ है या मनमाना कोड निष्पादित करके, लेकिन इस परिदृश्य में वैसे भी सभी सुरक्षा खो जाती है।
मारियोविलास

5

बस इसे एक कॉन्फिग फाइल में डाल देना कहीं न कहीं इसका एक तरीका है। बस आप सुनिश्चित करें:

  1. अपने नेटवर्क के बाहर किसी भी सर्वर से डेटाबेस एक्सेस को न करें,
  2. ध्यान रखें कि उपयोगकर्ताओं को गलती से पासवर्ड न दिखाएँ (त्रुटि संदेश में, या PHP फ़ाइलों के माध्यम से गलती से HTML, वगैरह के रूप में कार्य किया जा रहा है।)

5

हमने इसे इस तरह से हल किया है:

  1. अन्य पासवर्ड सर्वर से खुले कनेक्शन के साथ, सर्वर पर मेम्चे का उपयोग करें।
  2. पासवर्ड (या यहां तक ​​कि सभी password.php फ़ाइल एन्क्रिप्टेड) ​​याद करने के लिए सहेजें और साथ ही डिक्रिप्ट कुंजी।
  3. वेब साइट, पासवर्ड फ़ाइल पासफ़्रेज़ को धारण करने वाली मेम कीच को कॉल करती है और सभी पासवर्ड को मेमोरी में डिक्रिप्ट करती है।
  4. पासवर्ड सर्वर हर 5 मिनट में एक नया एन्क्रिप्टेड पासवर्ड फाइल भेजता है।
  5. यदि आप अपने प्रोजेक्ट पर एन्क्रिप्टेड पासवर्ड का उपयोग कर रहे हैं। आपने एक ऑडिट डाला है, तो जांच लें कि क्या यह फ़ाइल बाहरी रूप से छुआ है - या देखी गई। जब ऐसा होता है, तो आप स्वचालित रूप से मेमोरी को साफ कर सकते हैं, साथ ही एक्सेस के लिए सर्वर को बंद कर सकते हैं।

4

एक अतिरिक्त चाल PHP अलग विन्यास फाइल का उपयोग करने के लिए है जो उस तरह दिखता है:

<?php exit() ?>

[...]

Plain text data including password

यह आपको एक्सेस नियमों को ठीक से स्थापित करने से नहीं रोकता है। लेकिन आपकी वेब साइट हैक होने की स्थिति में, "आवश्यकता" या "शामिल" केवल पहली पंक्ति में स्क्रिप्ट से बाहर निकल जाएगी, इसलिए डेटा प्राप्त करना और भी कठिन है।

फिर भी, एक निर्देशिका में कॉन्फ़िगरेशन फ़ाइलों को कभी भी न दें जो वेब के माध्यम से पहुँचा जा सकता है। आपके पास एक "वेब" फ़ोल्डर होना चाहिए जिसमें आपका नियंत्रण कोड, सीएसएस, चित्र और जेएस हों। बस इतना ही। कुछ भी ऑफ़लाइन फ़ोल्डर में चला जाता है।


लेकिन फिर php स्क्रिप्ट फ़ाइल में संग्रहीत क्रेडेंशियल्स को कैसे पढ़ता है?
क्रिस्टोफर महान

3
आप फोपेन () का उपयोग करते हैं, जैसे एक नियमित पाठ फ़ाइल के लिए।
ई-सतीस

2
@ ई-सटिस ठीक है यह हैकर को रोकने के लिए require/ includeलेकिन कैसे करने के लिए रोकने के लिए होगा fopen?
dmnc

"यह आपको एक्सेस नियमों को ठीक से स्थापित करने से नहीं रोकता है"
ई-सतीस

@ ई-सटिस, यह बहुत चालाक है। आश्चर्य है कि किसी ने क्यों नहीं सोचा था। हालांकि , अभी भी संपादक की नकल की समस्या के प्रति संवेदनशील है। feross.org/cmsploit
पेसरियर

4

सबसे अच्छा तरीका है कि पासवर्ड को स्टोर न करें!
उदाहरण के लिए, यदि आप एक विंडोज सिस्टम पर हैं, और SQL सर्वर से कनेक्ट हो रहे हैं, तो आप मौजूदा प्रक्रिया की पहचान का उपयोग करके पासवर्ड के बिना डेटाबेस से कनेक्ट करने के लिए एकीकृत प्रमाणीकरण का उपयोग कर सकते हैं।

यदि आपको पासवर्ड से कनेक्ट करने की आवश्यकता है, तो पहले इसे एन्क्रिप्ट करें , मजबूत एन्क्रिप्शन का उपयोग करके (जैसे एईएस -256 का उपयोग करके, और फिर एन्क्रिप्शन कुंजी की रक्षा करें, या असममित एन्क्रिप्शन का उपयोग करके ओएस की सुरक्षा करें और फिर इसे स्टोर करें) कॉन्फ़िगरेशन फ़ाइल (वेब ​​निर्देशिका के बाहर) मजबूत ACL के साथ ।


3
पासवर्ड दोबारा एन्क्रिप्ट करने का कोई मतलब नहीं है । किसी को जो अनएन्क्रिप्टेड पासवर्ड से मिल सकता है, पासवर्ड को डिक्रिप्ट करने के लिए जो भी पासफ़्रेज़ की आवश्यकता होती है, वह भी प्राप्त कर सकता है। हालाँकि, ACLs & .htaccess का उपयोग करना एक अच्छा विचार है।
uliwitness

2
@ प्रत्यक्षदर्शी मुझे लगता है कि आपको गलत समझा जा सकता है - " फिर से एन्क्रिप्ट करें " से आपका क्या मतलब है ? यह सिर्फ एक एन्क्रिप्शन है। और आप इसे सुरक्षित करने के लिए पासफ़्रेज़ (मानव उपयोग के लिए) का उपयोग नहीं करना चाहते, बल्कि मजबूत कुंजी प्रबंधन, जैसे कि OS द्वारा संरक्षित, इस तरह से कि बस फ़ाइल सिस्टम तक पहुँच कुंजी को एक्सेस प्रदान नहीं करेगी।
शौकीन चावला

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

@MarioVilas वाट्स? यदि पासवर्ड एन्क्रिप्ट किया गया है, तो ओएस द्वारा संरक्षित एन्क्रिप्शन कुंजी के साथ, कोई अंतर नहीं है? एन्क्रिप्शन जादू नहीं है - यह बस सभी गोपनीयता को छोटे एन्क्रिप्शन कुंजी में कॉम्पैक्ट करता है। मुश्किल से सर्पिल, इस संदर्भ में यह सिर्फ ओएस में उस गोपनीयता को आगे बढ़ा रहा है
एवीडी

6
@ एवीडी कैसे आती है ओएस कुंजी की रक्षा कर सकता है लेकिन डेटा ही नहीं? उत्तर: यह दोनों की रक्षा कर सकता है, इसलिए एन्क्रिप्शन वास्तव में मदद नहीं करता है। यह भिन्न होगा यदि केवल डेटा संग्रहीत किया गया था और एन्क्रिप्शन कुंजी प्राप्त की गई थी, उदाहरण के लिए, एक पासवर्ड से जो एक उपयोगकर्ता द्वारा टाइप किया जाना था ।
मारियोविलास
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.