2009-06-13 8 views
5

पहली बार पाठक, पहली बार पोस्टर (Woo!)PHP कोड में SQL लॉगिन जानकारी संग्रहीत करने में सुरक्षा जोखिम?

तो मैं एक अनौपचारिक वेबसाइट के लिए अपनी लॉगिन स्क्रिप्ट लागू कर रहा हूं। समझौता करने की संभावना नहीं है, लेकिन केवल सुरक्षित होने के लिए, मैं यह पूछना चाहता हूं कि php कोड में सादे टेक्स्ट में संग्रहीत मेरा MySQL डेटाबेस लॉगिन होने में कोई सुरक्षा जोखिम है या नहीं।

जहाँ तक मुझे पता है, कोड को अपाचे द्वारा पार्स किया गया है, इसलिए अंतिम उपयोगकर्ता इसे (केवल आउटपुट) नहीं देखता है, जिसका अर्थ यह होगा कि इसे रखना सुरक्षित रखना चाहिए ... लेकिन मैं चाहता था दूसरी राय की तरह।

सारांश: mysql_connect, mysql_select_db, mysql_query के माध्यम से डेटाबेस तक पहुंच। स्क्रिप्ट के प्रत्येक पुनरावृत्ति पर परिभाषित स्थानीय चर में संग्रहीत लॉगिन जानकारी, और (मुझे लगता है) एक बार स्क्रिप्ट समाप्त हो जाती है।

सुरक्षा भेद्यता?

उत्तर

10

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

इस तरह, अगर किसी कारण से वेबसर्वर PHP फ़ाइलों को निष्पादित न करने का निर्णय लेता है तो आप डेटाबेस सर्वर को खाता जानकारी खोना नहीं चाहते हैं।

एक अतिरिक्त बोनस के रूप में, यदि आप कुछ भी उपयोग करते हैं जो वेबफॉट में .php फ़ाइल (संपादकों, एसवीएन या जो कुछ भी) की एक प्रति बनाता है, तो आप किसी को भी .php निष्पादन के आसपास होने का जोखिम नहीं लेते हैं।

+6

सत्य। जब मैंने पहली बार लिनक्स का उपयोग करना शुरू किया, तो ध्यान नहीं दिया कि जीएडिट ने filename.ext ~ बनाया है और जब मैंने फ़ोल्डर अपलोड किया है, तो ~ फाइलें इसके साथ जाएंगी। तो मैं mysite.com/index.php~ पर जा सकता था और वहां यह सादे पाठ – sqram

+2

@lyrae में था: मैं ... अच्छा भगवान, इसे इंगित करने के लिए धन्यवाद। मुझे नहीं पता था ... ओ.ओ * रन और हटा देता है * –

+0

यदि आपके पास बिल्कुल PHP फ़ाइल में पासवर्ड होना चाहिए, तो कम से कम sha1 या md5 इसे। – Shoan

0

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

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

7

यह उन वेब अनुप्रयोगों के लिए बहुत मानक प्रक्रिया है जो डेटाबेस से बात करते हैं।

मैं वेब सर्वर के अलावा अन्य उपयोगकर्ताओं के लिए फ़ाइल से पढ़ने की अनुमतियों को दूर करने की सलाह देता हूं - यदि आपके पास आपके बॉक्स पर अन्य उपयोगकर्ता हैं जो फ़ाइल पर जासूसी कर सकते हैं, तो वे आपके mysql सर्वर तक पहुंच पाएंगे।

इसके अलावा, आपको शीर्ष निर्देशिका पर निष्पादन योग्य अनुमति को समायोजित करना चाहिए क्योंकि यह अनधिकृत उपयोगकर्ताओं को इसे दर्ज करने से रोक देगा।

अपने mysql उपयोगकर्ता के अनुमत होस्ट को हार्ड करें, ताकि केवल आपको आवश्यक बॉक्स ही कनेक्ट कर सकें।

बेशक यदि आपके बॉक्स से समझौता किया गया है और हमलावर को रूट पहुंच प्राप्त होती है, तो वहां बहुत कम है जो आपकी रक्षा करेगा।

+2

+1 - यह सुनिश्चित करना भी एक अच्छा विचार होगा कि MySQL उपयोगकर्ता के पास ड्रॉप/अनुदान आदि जैसे विशेषाधिकार नहीं हैं – karim79

1

आप अपनी सभी php फ़ाइलों (निश्चित रूप से index.php को छोड़कर) को अलग निर्देशिका में डालकर सुरक्षा की कुछ अतिरिक्त परत जोड़ सकते हैं और उन्हें .htaccess फ़ाइल से सुरक्षित रख सकते हैं। इसमें ऐसे मामलों को शामिल किया गया है जिनमें PHP पार्सर का आह्वान नहीं किया जाता है और अपाचे फ़ाइलों को स्पष्ट टेक्स्ट में वापस कर देता है। एक और चीज जो उपयोगी हो सकती है: <?php defined('some_id_here') or die(); ?>। आप इसे इंडेक्स को छोड़कर प्रत्येक PHP फ़ाइल के शीर्ष पर रख सकते हैं।php (जहां आप some_id_here को परिभाषित करते हैं) इसलिए आपके डेटाबेस-फ़ाइलों तक कोई सीधी पहुंच नहीं है।

+0

क्या किसी ने कभी भी एक ठीक से कॉन्फ़िगर किया गया अपाचे उदाहरण PHP पार्सर का आविष्कार नहीं किया है। –

+0

ठीक है आप सही हैं। मेरा मतलब है कि निश्चित रूप से इस तरह की कल्पनात्मक चीजें वास्तविक जीवन में कभी नहीं होतीं, लेकिन मैंने सोचा कि यह उल्लेखनीय है। इसलिए "echo filetype: php" जैसी Google खोज कुछ भी नहीं बताती है और मुझे इस तरह की कुछ भी नहीं मिलती है http://tppserver.mit.edu/index.php3 जो मुझे http://tppserver.mit.edu/tpp_www पर ले जाता है .inc: ओ) हाहा – merkuro

+0

मेरा मानना ​​है कि यह हाल ही में फेसबुक के साथ हुआ था। http://www.phpdeveloper.org/news/8433 – Shoan

1

वेबूट के भीतर कोड का बड़ा हिस्सा नहीं है, जहां यह संभव है, हालांकि असंभव है, केवल रक्षा की पहली पंक्ति है जिसे लिया जा सकता है।

डेटाबेस उपयोगकर्ता और पासवर्ड प्रकाशित होने पर भी आपका डेटाबेस सुरक्षित होना चाहिए - केवल थोड़ी सी स्रोत मशीनों को डेटाबेस से कनेक्ट करने की अनुमति देने के सरल लाभ से।

गहराई

<?php // simplest /index.php, as the only .PHP file in the public-accessible webroot 
require '../bootstrap.php'; 
+0

केवल तभी काम करता है जब आपका वेबहोस्ट मूर्ख नहीं है और आपको सब कुछ खुले में रखने के लिए मजबूर करता है। – jmucchiello

+2

... और इसलिए केवल अगर आप एक मूर्ख वेबहोस्टिंग कंपनी को अपना पैसा देते हैं। –

1

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

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

एक कदम से अधिक सुरक्षा www-root या सुरक्षा के बाहर लॉगिन विवरण डालना है यह एक .htaccess फ़ाइल के साथ (यह वेबसर्वर के माध्यम से फ़ाइल तक पहुंच बनाना असंभव कर देगा)।

हालांकि मेरे सर्वर पर स्थानीयहोस्ट से कनेक्ट करना असंभव है। तो अगर कोई मेरा लॉगिन विवरण पढ़ता है तो मुझे परवाह नहीं है (यह निश्चित रूप से मामला नहीं है।)।

+0

अच्छा बिंदु। मुझे अपने डेटाबेस को केवल स्थानीय कनेक्शन स्वीकार करने के लिए कॉन्फ़िगर करना चाहिए, क्योंकि यह ठीक है कि मैंने अपना सेटअप कैसे किया है। चीयर्स! –

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