2012-05-15 13 views
5

मेरे उत्पादन एएसपी.नेट एमवीसी 3 साइट पर, मैं कभी-कभी "संभावित रूप से खतरनाक अनुरोध। क्लाइंट (%) से पैथ मान का पता लगा रहा था। । " विंडोज़ एप्लिकेशन लॉग में अनचाहे अपवाद।एएसपी.नेट एमवीसी "संभावित रूप से खतरनाक अनुरोध। पैथ" वैध यूआरएल

हालांकि ये नियमित साइट उपयोग (यानी/यादृच्छिक वेब बॉट्स) के तहत पूरी तरह से मान्य हो सकते हैं, कई अनुरोध मान्य, स्थानीय आईएसपी उपयोगकर्ताओं से होते हैं।

अपवाद के अनुरोध विवरण में, अनुरोध यूआरएल अनुरोध पथ से अलग है:

अनुरोध URL: http://www.somesite.com/Images/Image Space.jpg

अनुरोध पथ के साथ:/images/Imagehttp: // www। Space.jpgWithhttp साथ somesite.com/Images/Image: के साथ Space.jpgSpace.jpg

सूचना //www.somesite.com/Images/Image "अनुरोध पथ" में, किसी भी जगह है कि वहाँ एक " अंतरिक्ष "पथ में एक सटीक प्रति के साथ बदल दिया गया है अनुरोध यूआरएल के!

<img src="/Images/Image%20With%20Space.jpg" /> 

किसी भी विचार यह है कि क्या कारण हो सकता है:

साइट के भीतर, वास्तविक लिंक इस तरह दिखता है? मैंने Request.Path और Request.Url के लिए प्रलेखन को देखने का प्रयास किया, लेकिन मुझे पता नहीं लगा कि वे अलग क्यों होंगे। अनुरोध यूआरएल को मारना सीधे संसाधन को सही तरीके से लाता है।

अद्यतन:

Referer:: मैं IIS 7.0 के विफल अनुरोध ट्रेसिंग सुविधा का उपयोग करके खराब अनुरोधों में से एक के निशान पाने में कामयाब रहे गूगल खोज

उपयोगकर्ता-एजेंट: Mozilla/5.0 (iPad, सीपीयू ओएस 5_1_1 मैक ओएस एक्स) की तरह AppleWebKit/534.46 (KHTML, छिपकली की तरह) संस्करण/5.1 मोबाइल/9B206 सफारी/7534.48.3

RequestURL: http://www.somesite.com:80/Images/Image%20With%20Space.jpg

मैन्युअल रूप से मेरे आईओएस 5.1.1 में यूआरएल टाइप करना छवि को सही तरीके से लाता है। Google छवियों में छवि के लिए खोज छवि को सही ढंग से लाता है। अभी भी कोई सफल प्रजनन नहीं।

Partway नीचे का पता लगाने मैं देख रहा हूँ:

MODULE_SET_RESPONSE_ERROR_STATUS चेतावनी। ModuleName = "RequestFilteringModule", अधिसूचना = "BEGIN_REQUEST", HttpStatus = "404", HttpReason = "नहीं मिला", HttpSubStatus = "11",

आईआईएस 'प्रलेखन, 404.11 अनुरोध से के अनुसार छनन मॉड्यूल है यूआरएल में एक "डबल एन्कोडिंग" त्रुटि। थोड़ा सा प्रयोग करना, अगर मैं उद्देश्य से एक डबल एन्कोडेड यूआरएल बना सकता हूं जैसे http://www.somesite.com/Images/Image%2520With%2520Space.jpg मुझे इवेंट लॉग में सटीक त्रुटि मिलती है, तो विकृत अनुरोध पथ के साथ पूरा करें।

ईवेंट लॉग त्रुटि में विकृत अनुरोध पथ ASP.NET 4.0 में एक बग प्रतीत होता है।

यह नहीं है, तथापि, इसका कारण बताएं मैं पहली जगह में त्रुटि मिल रही है। मैं असफल अनुरोध लॉग की एक बड़ी संख्या की जाँच की - केवल आम कारक है कि वे सभी AppleWebKit का उपयोग कर रहे है।क्या सफारी में यह एक बग हो सकता है?

+0

http://stackoverflow.com/questions/5682160/a-potentially- खतरनाक-request-path-value-was-detected-from-the-client और http://stackoverflow.com/questions/6025522/getting -एक-संभवतः-खतरनाक-अनुरोध-पथ-मान-था-का पता चला-से-ग्राहक – VJAI

+0

URL वैध है और MVC/आईआईएस प्रक्रिया यह किसी भी समायोजन या संशोधनों के बिना - यह एक साधारण अनुरोध सत्यापन समस्या नहीं है। उपर्युक्त त्रुटि में दिखाए गए अनुरोध पथ पर ध्यान से देखें। – ShadowChaser

+0

मैं व्यक्तिगत रूप से सर्वर पर रिक्त स्थान के साथ फ़ाइल/पृष्ठ की अनुमति नहीं दूंगा। मैं हमेशा रिक्त स्थान को प्रतिस्थापित करता हूं -। –

उत्तर

1

Web.Config की httpRuntime अनुभाग URL के सत्यापन समायोजित करने के लिए संशोधित किया जा सकता। एएसपी एमवीसी परियोजनाएं आमतौर पर सत्यापन मोड 2.0 में चल रही हैं और डिफ़ॉल्ट अमान्य वर्ण (अल्पविराम से अलग) नीचे सूचीबद्ध हैं।

<httpRuntime requestValidationMode="2.0" requestPathInvalidCharacters="&lt;,&gt;,*,%,:,&amp;,\" /> 

आप देख सकते हैं% चिह्न मान्य नहीं होता। प्रमाणीकरण त्रुटि के कारण एक स्थान को% 20 में एन्कोड किया जा सकता है। तुम बस अपने Web.config फ़ाइल में httpRuntime अनुभाग के लिए requestPathInvalidCharacters विशेषता जोड़ने और मूल्यों मैं "%," भाग के लिए छोड़कर नीचे सूचीबद्ध कॉपी कर सकते हैं।

स्कॉट Hanselman इस मुद्दे के बारे में एक ब्लॉग पोस्ट किया है: - प्रतिबंधित उपयोगकर्ता-एजेंट दिया -

http://www.hanselman.com/blog/ExperimentsInWackinessAllowingPercentsAnglebracketsAndOtherNaughtyThingsInTheASPNETIISRequestURL.aspx

+0

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

+0

दिलचस्प बात यह है कि ऐसा लगता है कि अनुरोध ASP.NET 4.0 पर पहुंचने से पहले समस्या हो रही है। अगर मैं डीबगर में ब्रेकपॉइंट डालता हूं, तो Request.Path कोई प्रतिशत प्रतीक नहीं दिखाता है और इसमें स्पेस वर्णों वाला एक पूर्ण डीकोडेड यूआरएल है। अनचाहे अपवाद ASP.NET में होता है जब यह URL में% वर्ण का पता लगाता है। इसका मतलब है कि किसी भी कारण से, आईआईएस 7.0 गलत तरीके से यूआरएल को डीकोड कर रहा है या इसकी शुरूआत से खराब है। इवेंट लॉग में कहीं भी यह "सत्य" (मूल) एन्कोडेड यूआरएल दिखाता है। – ShadowChaser

1

मुझे लगता है कि सोच मदद नहीं कर सकता इस पर है कि ब्राउज़र द्वारा URL के गलत हैंडलिंग का प्रतिनिधित्व कर सकते आईओएस 5.1.1। मेरे पास व्यक्तिगत रूप से ऐसे डिवाइस का स्वामित्व नहीं है, इसलिए मैं इसका परीक्षण नहीं कर सकता - लेकिन यह जांचना दिलचस्प होगा कि यह उस यूआरएल के साथ कैसे व्यवहार करता है जिसमें वास्तव में इसके स्थान हैं।

मुझे एहसास है कि यह पृष्ठ स्रोत से यूआरएल में %20 देख रहा है और इसे डबल-एन्कोडिंग कर रहा है, यह सोचकर कि यह सहायक हो रहा है। समस्या यह है कि आईआईएस इसे वापस डीकोड करेगा (एएसपीनेट में आने से पहले) और इसे अपने प्राइम से बाहर निकाल दें क्योंकि अब यह अंतरिक्ष के बजाय एक शाब्दिक %20 देखता है।

मैं व्यक्तिगत रूप से अपने सर्वर 'सुरक्षा सेटिंग संशोधित करने की अनुशंसा नहीं करते; हालांकि यह सबसे आसान समाधान होगा इसलिए मैं कहता हूं कि आप यही करेंगे।

बल्कि, मैं अगर आप इस 'बग' (मैं पहले से ही सड़क पर कर रहा हूँ, एप्पल के वकीलों से एक सुरक्षित छिपने की जगह पाने के) इस बात की पुष्टि कर सकते हैं, वह स्वरूप है जो इस डिवाइस के लिए काम करता है लगता है; या अपने संसाधन यूआरएल से सभी रिक्त स्थान ले लो। एक - सबसे अच्छा विकल्प है।

+2

मैं इसे एन्कोडिंग है Safari- के किसी चित्र में अनुरोध के साथ एक ही बात की खोज में "?" कर रहा हूँ के लिए स्रोत कोड यूआरएल में, जिसे पथ के हिस्से के रूप में माना जाता है, इसलिए एएसपीनेट कह रहा है कि "वाह, कोई पथ में प्रश्न चिह्न डालकर आपको हैक करने की कोशिश कर रहा है !!"। मुझे लगता है कि उस विशेष पथ के लिए एक प्रश्न चिह्न के बिना एक यूआरएल का उपयोग करने के लिए refactor होगा ... – MajorRefactoring

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