2009-11-29 11 views
8

मैं अपने एक्सटेंशन के लिए फ़ाइल की जांच करता हूं, और माइम प्रकार - क्या फ़ाइल अपलोड को सुरक्षित बनाने में मदद करने के लिए मैं कुछ और कर सकता हूं?php में एक सुरक्षित फ़ाइल अपलोड स्क्रिप्ट कैसे बनाएं?

इसके अवतार के लिए (इसलिए सभी छवियां एक फ़ोल्डर में हैं)। मैं किसी भी php निष्पादन को रोकने के लिए htaccess का उपयोग करने के बारे में सोच रहा था बस कुछ php फ़ाइल को वहां अपना रास्ता मिला। तुम क्या सोचते हो?

उत्तर

19

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

तो, जब तक आप आप is_uploaded_file() और move_uploaded_file() का उपयोग करते अपलोड से निपटने के लिए सुनिश्चित करें, आप ठीक होना चाहिए, कम से कम छवि प्रारूप के मोर्चे पर। सुनिश्चित करें कि आप नीचे @ बॉबन्स की पोस्ट पढ़ते हैं और लिंक का पालन करते हैं, इसमें फ़ाइलों से निपटने के दौरान अन्य सुरक्षा पहलुओं पर बड़ी जानकारी का एक गुच्छा शामिल है।

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

+0

+1। –

16
  1. उपयोगकर्ता द्वारा सबमिट किए गए फ़ाइल नामों का कभी भी उपयोग न करें; «यादृच्छिक संख्या» .jpeg जैसे नए बनाओ। 'Sanitizing' फ़ाइल नाम आपके विचार से कठिन है, खासकर अगर ऐप को विंडोज सर्वर पर चलाने में सक्षम होना चाहिए।

  2. छवियों के लिए, अत्यधिक अविश्वसनीय फ़ाइल नाम और मिमटाइप सबमिशन को देखने के बजाय, छवि के फ़ाइल प्रकार को निर्धारित करने के लिए PHP getimagesize फ़ंक्शन का उपयोग करें। उन छवियों को अस्वीकार करें जो छवियों के रूप में पार्स नहीं करते हैं।

  3. डाउनलोड किया जा करने का इरादा कर रहे हैं कि फ़ाइलों के लिए, HTML सामग्री के लिए सूँघने और ब्राउज़र में प्रदर्शित आईई को रोकने के लिए Content-Disposition: attachment हेडर का उपयोग करें।

  4. इनलाइनों को इनलाइनों को प्रदर्शित करने के लिए आपको अपनी मुख्य साइट पर एक अलग होस्टनाम से सेवा करनी होगी, अन्यथा उनके अंदर HTML सामग्री आपके सुरक्षा संदर्भ में क्रॉस-साइट-स्क्रिप्ट कर सकती है।

एक फाइल अपलोड सुविधा सुरक्षित बनाना कठिन है। More discussion। छवि की प्रतिलिपि बनाने के लिए

+0

3 के बारे में नहीं पता था, महान टिप्स और महान लिंक। –

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