2010-10-26 12 views
7

मैं यह सुनिश्चित करने के लिए फ़ाइल प्रकार को सत्यापित करना चाहता हूं कि उपयोगकर्ता जेपीईजी, जीआईएफ, या पीएनजी प्रकार की छवि अपलोड कर रहा है। फ़ाइल एक्सटेंशन की जांच करने के बजाय, मुझे HttpPostedFile का उपयोग करके लगाया गया। सामग्री टिप सुरक्षित होगा क्योंकि यह MIME सामग्री प्रकार की जांच करता है।क्या HttpPostedFile.Content अपलोड की गई फ़ाइल को सत्यापित करने के लिए एक निर्दोष तरीका टाइप करें?

protected void cvValidateImageType_ServerValidate(object source, ServerValidateEventArgs args) 
{ 
    if (fupImage.HasFile) 
    { 
     args.IsValid = (fupImage.PostedFile.ContentType.ToLower() == "image/jpg" || 
         fupImage.PostedFile.ContentType.ToLower() == "image/jpeg" || 
         fupImage.PostedFile.ContentType.ToLower() == "image/pjpeg" || 
         fupImage.PostedFile.ContentType.ToLower() == "image/gif" || 
         fupImage.PostedFile.ContentType.ToLower() == "image/x-png" || 
         fupImage.PostedFile.ContentType.ToLower() == "image/png"); 

    } 
    else 
     args.IsValid = true; 
} 

क्या यह फ़ाइल प्रकार की जांच करने का एक निर्दोष तरीका है, या इसे मूर्ख बनाया जा सकता है?

उत्तर

6

एक्सटेंशन का उपयोग करना शायद सुरक्षित है। ContentType क्लाइंट से http अनुरोध में भेजा जाता है। यदि आप एक्सटेंशन के लिए परीक्षण करते हैं, तो उपयोगकर्ता ex ex के एक्सटेंशन को jpg पर बदल सकता है, लेकिन यह exe के रूप में नहीं चलाया जाएगा।

4

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

0

मज़बूती से सामग्री प्रकार जानने के लिए, आप सामग्री प्रकार सूँघने, उदाहरण के लिए इस पर गौर करना चाह सकते हैं:

http://suika.fam.cx/www/markup/html/whatpm/Whatpm/ContentType.html

यह पहले कुछ बाइट्स का परीक्षण करके फ़ाइल की सामग्री प्रकार निर्धारित करने की कोशिश करता है।

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