2012-02-13 11 views
5

जब भी मैं सर्वर पर एक फ़ाइल में एक PHP स्क्रिप्ट लिखना आउटपुट चाहता हूं तो मुझे अक्सर नकारात्मक टिप्पणियों का सामना करना पड़ता है।सर्वर सुरक्षा 0 समझौता किए बिना PHP को फ़ाइल लिखने की अनुमति कैसे देते हैं

मैं fopen(), fwrite() और fclose() फ़ंक्शंस का उपयोग करता हूं।

एकमात्र तरीका मुझे पता है कि यह कैसे करना है, या तो आउटपुट फ़ाइल के लिए अनुमतियों को 0666 पर सेट करना है या इसका स्वामित्व "कोई नहीं" है (जो उपयोगकर्ता है जो PHP हमारे अपाचे वेब सर्वर पर चलता है)।

तो, यदि "0666" या "किसी के स्वामित्व में नहीं" सुरक्षा जोखिम हैं, तो आप एक PHP स्क्रिप्ट को फ़ाइल में लिखने के लिए सफलतापूर्वक और सुरक्षित रूप से कैसे अनुमति देते हैं?

इस विषय पर मार्गदर्शन साझा करने के लिए धन्यवाद।

+0

कृपया बताएं कि आप अपनी स्क्रिप्ट को फ़ाइल में लिखने की अनुमति देकर 'सर्वर सुरक्षा समझौता' कैसे कर रहे हैं। एक डीबी को भी एक सुरक्षा जोखिम लिख रहा है? बस सुनिश्चित करें कि आपके कोड में कोई सुरक्षा बग नहीं है। जब तक चीजें सही होती हैं, तब तक कोई समस्या नहीं होती है। – Flukey

+0

@ फ्लाकी ... इसमें मेरे प्रश्न का उद्देश्य है। मैं इस मुद्दे को स्पष्ट रूप से नहीं देखता हूं। लेकिन जब भी मैं उल्लेख करता हूं कि मेरे पास सर्वर पर 0666 फ़ाइल है या उपयोगकर्ता द्वारा स्वामित्व वाली एक फ़ाइल है जो PHP के अंतर्गत चलती है, मुझे चेतावनी टिप्पणियां मिलती हैं जो ... के साथ जाती हैं और निश्चित रूप से आप जानते हैं कि आप सुरक्षा के लिए अपना सर्वर खोल रहे हैं जोखिम "। मैं बस सर्वर सुरक्षा समझौता किए बिना प्रभावी स्क्रिप्ट लिखना चाहता हूं। –

+1

जब तक फ़ाइल को सार्वजनिक अपाचे निर्देशिका के बाहर लिखा जाता है, तब मुझे कोई समस्या नहीं दिखाई देती है। उनकी टिप्पणियां अज्ञानी हैं। – Flukey

उत्तर

3

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

  1. फ़ाइल नाम और पथ आसानी से अनुमान लगाने योग्य बनाएं। यदि किसी उपयोगकर्ता के पास getfile.php?file=1.txt का पथ है तो वे आसानी से अनुमान लगा सकते हैं कि 2.txt भी है। नाम क्रिप्ट करें या इसे अपमानित करें।
  2. फाइलों की सेवा करने वाली कोई भी स्क्रिप्ट बनाएं, लॉग इन उपयोगकर्ता, संसाधन के लिए प्राधिकरण और /etc/passwd और इसी तरह के नकली संदर्भों से बचने के लिए पथ वाले फ़ाइल नाम से कुछ भी पट्टी करें।

यदि आपको फ़ाइल को बंद करने और इसे कभी भी सेवा देने या इसे PHP के माध्यम से एक्सेस करने की आवश्यकता नहीं है, तो आपके पास कुछ और विकल्प हैं। या तो chmod या chown आदेशों का उपयोग अपाचे उपयोगकर्ता को अपठनीय बनाने के लिए करें। यदि आप अतिरिक्त परावर्तक बनना चाहते हैं, तो क्रॉन स्क्रिप्ट फ़ाइल स्रोत (और इसका नाम बदलें) को PHP स्रोत के भीतर अज्ञात स्थान पर ले जाएं। कम से कम यदि आपका सर्वर हैक किया गया है तो घुसपैठिया निर्देशिका में सीधे नहीं चल सकता है, लेकिन हम उस बिंदु की ओर बढ़ रहे हैं जहां चर्चा ऑपरेटिंग सिस्टम सुरक्षा में है।

+0

धन्यवाद @DuaneGran। मैं आपके उत्तर के माध्यम से पढ़ूंगा और जल्द ही इसे और अधिक अच्छी तरह से पचाना होगा। लेकिन मेरी पहली प्रतिक्रिया यह है कि "हैश नाम" से आपका क्या मतलब है? और, आप इसे कैसे करते हैं और स्क्रिप्ट में इसका उपयोग करते हैं? –

+0

@ डॉ डीओटी मुझे एक हैश का सुझाव देने के लिए गलत था क्योंकि यह एक तरीका है। मेरी गलती। जैसा कि होता है, इस हालिया प्रश्न में आसान क्रिप्ट/डिक्रिप्ट फ़ंक्शंस के बारे में उत्तर हैं जो फ़ाइल नाम के लिए काम करेंगे: http://stackoverflow.com/questions/9262109/php-simplest-two-way-encryption –

-1

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

वास्तव में वे आपको समझौता करने के लिए सभी प्रकार की चीजें कर सकते हैं। मैंने इसे अपने सर्वर पर देखा है और वास्तव में इसका सही समाधान नहीं मिला है।

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

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