2011-08-03 16 views
7

में exe फ़ाइल अपलोड करने से रोकने के लिए कैसे मैं एक अच्छा समाधान ढूंढ रहा हूं जिसके द्वारा हम सर्वर पर एक exe फ़ाइल को अपलोड करने से रोक सकते हैं।एएसपीनेट एमवीसी

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

मैंने पहले से ही एक बेहतर समाधान की तलाश में विस्तार जांच लागू कर दी है।

+3

फ़ाइल शीर्षलेख जाली जा सकती है। अपलोड किए गए डेटा के पहले दो बाइट्स देखें - यदि यह 'एमजेड' है, तो बाधाएं आपको निष्पादन योग्य हैं। –

+0

डुप्लिकेट: http://stackoverflow.com/questions/3635128/validate-file-type-extension – Matthieu

उत्तर

7

एक कैसे और कब/कहाँ भाग है। यह काफी सरल है, क्योंकि बाइनरी फाइलों में हेडर होता है और हेडर स्ट्रिप आउट और चेक करना काफी आसान होता है। विंडोज़ फाइलों के लिए, आप आलेख Executable-File Header Format देख सकते हैं। इसी प्रकार के प्रारूपों का उपयोग अन्य बाइनरी प्रकारों के लिए किया जाता है, ताकि आप उन प्रकारों को निर्धारित कर सकें जिन्हें आप अनुमति देते हैं और जिन्हें आप नहीं करते हैं।

नोट: लिंक किया गया आलेख फ़ाइल की पूरी क्वेरीिंग के लिए है। सस्ते, नीचे और गंदे, शॉर्टकट हैं जहां आप केवल कुछ बाइट्स की जांच करते हैं।

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

1

मुझे लगता है कि आप जावास्क्रिप्ट द्वारा डेटा को सबमिट करने से पहले फ़ाइल को समाप्त करने से पहले जावास्क्रिप्ट द्वारा ऐसा कर सकते हैं और चेक सर्वर पक्ष भी कर सकते हैं।

2

अपलोड किए गए डेटा तक पहुंच का पहला बिंदु HttpModule में होगा। तकनीकी रूप से आप सभी बाइट्स भेजे जाने से पहले जांच सकते हैं यदि आपके हाथों में .exe है और अपलोड रद्द करें। यह कितना दूर लेना चाहते हैं इस पर निर्भर करता है कि यह काफी जटिल हो सकता है।

मेरा सुझाव है कि आप ब्रेटल के NeatUpload के HttpModule को देखें। हो सकता है कि यह आपको उस स्तर पर कैसे पहुंचाएगा जिस पर आप चाहते हैं।