कई परतें हैं जिनकी आपको रक्षा करने की आवश्यकता है।
कुछ होस्टर्स गलत तरीके से PHP "सुरक्षा" पर भरोसा करें जैसे open_basedir, safe_mode (पुराने PHPs), disable_functions आदि।
यहां तक कि PHP भी उन्हें सुरक्षा विशेषताएं नहीं मानता - http://php.net/security- Note.php
इन्हें PHP के लिए किसी भी कारनामे के साथ अक्षम किया जा सकता है और फिर पूरी प्रणाली बर्बाद हो जाती है, नहीं . करें ऐसा करो।
इसे कैसे किया जाना चाहिए
नीचे
- हर होस्ट की गई साइट के लिए अलग OS-स्तर/सिस्टम उपयोगकर्ता
- सही अनुमतियां (कोई दूसरे के पृष्ठ को देखने/संपादित करने में सक्षम नहीं हो सकता है) - यह भी सुनिश्चित करें कि उप-निर्देशिकाओं में सही अनुमति है क्योंकि वे समान होने जा रहे हैं
- अलग सत्र फ़ाइलें (बहुत सारी वेबहोस्टिंग प्रत्येक PHP-होस्टेड साइट की सत्र फ़ाइलों को एक ही निर्देशिका में रखती हैं, यह बुरा बुरा है!
अपाचे को आखिरकार इसके लिए अपना मॉड्यूल मिल गया - Apache MPM-ITK ।
लंबी कहानी छोटी: इसे इस तरह से चित्रित करें जैसे आप उपयोगकर्ता को मशीन पर एक शेल देंगे (अपने स्वयं के यूआईडी के तहत) - वह अन्य होस्ट की गई साइटों के लिए कुछ भी करने में सक्षम नहीं हो सकता है।
- अलग यूआईडी/जीआईडी
- सिस्टम अनुमतियां
- SELinux, AppArmor और इसी तरह के ढांचे
- यदि आप कट्टर होना चाहते हैं तो सुरक्षा.. लेकिन सिस्टम को बनाए रखना कठिन होगा।
ऊपर जा रहे हैं?
आप अधिक हार्ड-कोर प्राप्त कर सकते हैं। मैंने जो सबसे अच्छा देखा है वह अपाचे (या जो कुछ भी आप उपयोग करते हैं) के लिए एक साझा-लाइब्रेरी है - इसका उपयोग तब किया जाता है जब अपाचे को LD_PRELOAD
का उपयोग करना शुरू किया जाता है और यह सभी संभावित दुर्भावनापूर्ण सिस्टम कॉल जैसे system()
. को लागू करता है , execve()
और मूल रूप से कोई अन्य कॉल जो आपको खराब लगती है।
मैंने अभी तक इसका एक अच्छा कार्यान्वयन नहीं देखा है (कहीं भी कस्टम वाले के अलावा) - अगर मैं गलत हूं तो मुझे सुधारें।
उदाहरण के लिए इसके लिए एक श्वेत-सूची लागू करना सुनिश्चित करें। PHP में mail() डिफ़ॉल्ट रूप से सेंडमेल निष्पादित करता है और यह अब काम नहीं करेगा।
कंसलूशन
वैश्विक php.ini में क्लासिक disable_functions, open_basedir, आदि जोड़ें, प्रत्येक vhost में session.save_path जोड़ें - उपयोगकर्ता निर्देशिकाओं में सत्र डालें। सुनिश्चित करें कि उपयोगकर्ता कुछ भी साझा न करें ।
अंडरलेइंग ओएस-लेवल सेपरेशन को सही तरीके से लागू करें।
grsec और LD_PRELOAD lib हुकिंग सिस्टम कॉल के साथ हार्डकोर बनें।
पृथक्करण, पृथक्करण, पृथक्करण .. जल्द ही डॉकर जैसे पर्याप्त सिस्टम कर्नेल स्तर पर उपयोगकर्ताओं को अलग करने के लिए एलएक्ससी-आधारित कंटेनर प्रदान करेंगे लेकिन यह अभी तक पूरी तरह से तैयार नहीं है (imho)।