2012-10-12 9 views
11

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

सार्वजनिक रूप से उपलब्ध फ़ाइल अपलोड नियंत्रण से मुझे क्या जोखिम होंगे? क्या वैसे भी कोई दुर्भावनापूर्ण फ़ाइल अपलोड करके वेब सर्वर पर दुर्भावनापूर्ण स्क्रिप्ट निष्पादित कर सकता है।

मैं कुछ शोध किया और पता चला निम्नलिखित बातों

  1. अगर मैं एक ईमेल में अनुलग्नक के रूप में एक फ़ाइल बाहर भेज दिया, इस फ़ाइल को अस्थायी एएसपी नेट फ़ोल्डर में अस्थायी अवधि के लिए संग्रहीत किया जाएगा, और ईमेल एक बार भेजा जाता है यह हटा दिया जाएगा।
  2. आप फ़ाइल सिस्टम पर सहेजने से पहले फ़ाइल का नाम बदल सकते हैं।
  3. आप अपनी वेबसाइट
  4. के रूप में विभिन्न स्थान पर फ़ाइल सहेज सकते हैं आपके पास कुछ प्रकार का वास्तविक समय वायरस जांच हो सकती है। मुझे यकीन नहीं है कि आप यह कैसे कर सकते हैं। मैं कुछ कमांड लाइन वायरस स्कैन के बारे में पढ़ रहा था। लेकिन यकीन नहीं है कि मुझे वास्तव में इसकी आवश्यकता है।

ये कुछ ही अंक हैं, लेकिन मैं फ़ाइल अपलोड में किसी भी अंधेरे स्पॉट के बारे में जानना चाहता हूं।

+0

दरअसल, यदि आप इसे अनुलग्नक के रूप में भेजते हैं, तो यह आपकी डिस्क को कभी छूता नहीं है। – SLaks

+1

मैं जवाब देने का भी प्रयास नहीं कर रहा हूं, मैं आमतौर पर कुछ हवाओं का सुझाव देने के लिए वोट नहीं देता हूं। एयरटाइट में कोई सुविधा नहीं है। उस ने कहा, यदि आप अपलोड फ़ोल्डर में एक अवैध web.config या अन्यथा खराब वेब.कॉन्फिग डालते हैं, तो आप किसी भी .NET कोड को निष्पादित करने से रोक सकते हैं। आप यह सुनिश्चित करना चाहते हैं कि आप सभी एक्सटेंशन को अवरुद्ध कर रहे हैं जो आपके सर्वर पर निष्पादित कुछ चीज़ों को मैप करते हैं, जिनमें .php, .axd, .ashx और इसी तरह शामिल हैं। – MatthewMartin

+2

सावधान रहें आपका फॉर्म स्पैमर पसंदीदा खिलौना नहीं बनता है। फ़ाइल जोखिमों का बचाव करने के अलावा, कितनी बार इसे भेजा जा सकता है और कितनी बार सीमित किया जा सकता है। – AlG

उत्तर

6

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

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

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

सुनिश्चित करें कि आप उपयोगकर्ता द्वारा सबमिट किए गए डेटा (GET या POST के माध्यम से डाउनलोड) के रूप में पथ कभी भी पास नहीं करते हैं, जो आपको पथ ट्रैवर्सल हमले के बारे में बता सकते हैं। यदि आपके उपयोगकर्ता को ब्राउज़र से फ़ाइल डाउनलोड करने की आवश्यकता है, तो आप रिकॉर्ड्स को संग्रहीत करने के लिए डेटाबेस बना सकते हैं और उसके बाद एक नियंत्रक या पृष्ठ बना सकते हैं जो डेटाबेस रिकॉर्ड के आधार पर इसे लाएगा और उपयोगकर्ता उस रिकॉर्ड तक पहुंच पाएंगे, बजाय पथ जो उपयोगकर्ता आपके सर्वर से फ़ाइलों को प्राप्त करने के लिए नियंत्रित और उपयोग कर सकता है।

सुनिश्चित करें कि निर्देशिका आप को बचा लेगा वेब सर्वर द्वारा पढ़ने योग्य नहीं है, इस तरह से वे एक मैलवेयर स्क्रिप्ट अपलोड नहीं करते हैं और फिर एक HTTP

के माध्यम से अपने ब्राउज़र से उस पर अमल सुनिश्चित करें कि आप को मान्य कुछ एंटी-एक्सएसएस लाइब्रेरी के खिलाफ सभी उपयोगकर्ता इनपुट (माइक्रोसॉफ्ट एक http://www.microsoft.com/en-us/download/details.aspx?id=28589 प्रदान करता है)

आशा है कि मदद करता है!

4

सबसे अच्छा तरीका उन्हें/App_Data फ़ोल्डर में अपलोड करना या उन्हें बाइनरी ऑब्जेक्ट्स के रूप में डेटाबेस में संग्रहीत करना है। ऐप_Data वेब सर्वर के माध्यम से पठनीय नहीं है, इसलिए यह आपको निष्पादित करने और स्क्रिप्ट पहुंच के विरुद्ध सुरक्षा करेगा। बाइनरी में उन्हें संग्रहीत करने का एक विकल्प बेस 64 को एन्कोड करना है और उन्हें टेक्स्ट में संग्रहीत करना है (फिर या तो फ़ाइल सिस्टम App_Data या डेटाबेस में)।

उपयोगकर्ता को फ़ाइल देखने/डाउनलोड करने की अनुमति देने के लिए प्रॉक्सी पृष्ठ बनाएं और यदि फ़ाइल को HTTP प्रतिक्रिया में फ़ाइल की स्ट्रीम भेजें। इस प्रकार उपयोगकर्ताओं के पास प्रत्यक्ष पहुंच नहीं होती है और वे कुछ भी निष्पादित नहीं कर सकते हैं जो उन्हें नहीं करना चाहिए। आप स्ट्रीम संदर्भ से SMTP कक्षाओं का उपयोग कर फ़ाइलों को भी संलग्न कर सकते हैं।

यदि फ़ाइल सिस्टम में संग्रहीत किया जा रहा है तो आप अपना नामकरण सम्मेलन लागू कर सकते हैं ताकि वास्तविक फ़ाइल के लिए अनुरोध संग्रहीत संस्करण में मैप किया जा सके।

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

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