संभावित खतरनाक Request.Path मान क्लाइंट (*) से पाया गया था


218

मैं स्वयं स्पष्ट व्याख्यात्मक त्रुटि प्राप्त कर रहा हूं:

संभावित खतरनाक Request.Path मान क्लाइंट (*) से पाया गया था।

समस्या *अनुरोध URL के कारण है :

https://stackoverflow.com/Search/test*/0/1/10/1

इस url का उपयोग एक खोज पृष्ठ को पॉप्युलेट करने के लिए किया जाता है जहाँ 'test *' खोज शब्द होता है और शेष url विभिन्न विभिन्न फिल्टरों से संबंधित होता है।

क्या URL में इन विशेष वर्णों को अनुमति देने का एक आसान तरीका है? मैं web.configकोई फायदा नहीं हुआ, को संशोधित करने की कोशिश की है ।

क्या मुझे विशेष वर्णों को मैन्युअल रूप से एन्कोड / डिकोड करना चाहिए? या ऐसा करने के लिए सबसे अच्छा अभ्यास है, मैं क्वेरी स्ट्रिंग का उपयोग करने से बचना चाहूंगा। - लेकिन यह एक विकल्प हो सकता है।

एप्लिकेशन स्वयं एक c# asp.netवेबफॉर्म एप्लिकेशन है जो ऊपर अच्छा URL बनाने के लिए रूटिंग का उपयोग करता है।


1
क्या आपका पेज ValidateRequest=falseसबसे ऊपर है?
नील नाइट

मुझे नहीं पता कि किस कारण से वेबसाइट आंतरिक रूप से पुनर्निर्देशन की कोशिश कर रही थी, जो ' लोकलहोस्ट /: // लोकलहोस्ट / माय वेवसाइटनेम ' जैसा URL बना रहा था जो मुझे वही त्रुटि दे रहा था। मुझे नहीं पता कि ASP.net पाइपलाइन इसे एक खतरनाक अनुरोध URL क्यों मानती है।
आरबीटी

जवाबों:


97

*चरित्र URL का पथ में अनुमति नहीं है, लेकिन वहाँ क्वेरी स्ट्रिंग में इसे का उपयोग कोई समस्या नहीं है:

http://localhost:3286/Search/?q=test*

यह एन्कोडिंग समस्या *नहीं है, URL में वर्ण का कोई विशेष अर्थ नहीं है, इसलिए इससे कोई फर्क नहीं पड़ता कि आप URL को एनकोड करते हैं या नहीं। आपको एक अलग योजना का उपयोग करके इसे एनकोड करना होगा, और फिर इसे डीकोड करना होगा।

बच चरित्र के रूप में एक मनमाना चरित्र का उपयोग कर उदाहरण के लिए:

query = query.Replace("x", "xxx").Replace("y", "xxy").Replace("*", "xyy");

और डीकोडिंग:

query = query.Replace("xyy", "*").Replace("xxy", "y").Replace("xxx", "x");

15
"Xxx" "xxy" "xyy" गेम बहुत चालाक है। आप इसके पीछे के तर्क पर विस्तार से विचार कर सकते हैं ताकि पाठकों को भ्रमित न करें।
15

2
अनुरोध यह था कि इसमें उपयोग किया जाए PATHन कि क्वेरिस्ट्रिंग में।
ह्यूगो डेलिंगिंग

मैं उसी परिदृश्य में भाग गया जहाँ मेरा एक पैरामीटर URL था। ठीक से URL एनकोड होने पर भी मुझे यह त्रुटि मिलेगी। मैंने आखिरकार बस बेस 64 को पैरामीटर (और अपने एपीआई में डिकोड) को इनकोड किया जो कि यह पता लगाने की कोशिश करने की तुलना में बहुत आसान था कि क्या चल रहा था। संभवतः एक बेहतर विकल्प जो आपकी खुद की दिनचर्या को भी लागू करता है।
स्पोकेनडे जेज

1
क्या आप एक सरल एन्कोडिंग योजना के रूप में aa<=> aऔर ab<=> का उपयोग नहीं कर सकते हैं *?
जारेड

अभी के लिए यह मेरे बचाया, धन्यवाद, लेकिन उचित समय में मैं इस सलाह की जांच करना चाहते: stackoverflow.com/a/603962/1830909 और मैं Glade हो जाएगा अपने विचार सुनना है।
QMaster

316

यदि आप .NET 4.0 का उपयोग कर रहे हैं, तो आपको web.config के माध्यम से इन यूआरएल की अनुमति देने में सक्षम होना चाहिए

<system.web>
    <httpRuntime 
            requestPathInvalidCharacters="&lt;,&gt;,%,&amp;,:,\,?" />
</system.web>

ध्यान दें, मैंने अभी तारांकन चिह्न (*) निकाला है, मूल डिफ़ॉल्ट स्ट्रिंग है:

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

देखें इस सवाल का अधिक जानकारी के लिए।


5
किसी एक्शन पर mvc विशेषता का उपयोग करके ऐसा करने का कोई तरीका तो मुझे इसे पूरे ऐप के लिए बंद नहीं करना है? इस उत्तर के समान यहां: stackoverflow.com/a/1540976/298758
longda

4
@ लोंगडा: संभवत: इसे उस url के लिए <स्थान पथ = "my / path"> तत्व के साथ लपेटने का प्रयास करें, जिसकी आपको आवश्यकता है। प्रतिबिंब का उपयोग करना वैश्विक दृष्टिकोण से यथोचित सरल होगा, लेकिन मैं इसे प्रति नियंत्रक / कार्रवाई के आधार पर स्थापित करने के बारे में निश्चित नहीं हूं। शायद एक सवाल शुरू करें?
डेव ट्रांसॉम

यह सिर्फ ASP.net MVC प्रोजेक्ट पर काम नहीं कर रहा है, व्यूस्टार्ट में लेआउट निर्धारित करने के लिए रन प्रक्रिया प्राप्त करने से यह त्रुटि मिली: पथ में अवैध चरित्र।
QMaster

7

मेरे लिए, मैं वेब एपीआई 2.0 के साथ .net 4.5.2 पर काम कर रहा हूं, मेरे पास एक ही त्रुटि है, मैंने इसे बस अनुरोध में जोड़कर सेट किया है। InPathInvalidCharacters = "" requestPathInvalidCharacters में आपको उन वर्णों को सेट करना होगा जिन्हें आपको वर्णों को हटाना होगा इस समस्या का कारण।

<system.web>
     <httpRuntime targetFramework="4.5.2" requestPathInvalidCharacters="" />
     <pages  >
      <namespaces>
     ....
 </namespaces>
    </pages> 
  </system.web>

** ध्यान दें कि यह एक अच्छा अभ्यास नहीं है, इस पैरामीटर के साथ एक पद हो सकता है क्योंकि किसी ऑब्जेक्ट की विशेषता बेहतर है या विशेष चरित्र को एन्कोड करने का प्रयास करना है। - बाकी आपी को डिजाइन करने के लिए सर्वोत्तम अभ्यास पर खोज करने के बाद, मैंने पाया कि खोज, सॉर्ट और पेजिनेशन में, हमें इस तरह क्वेरी पैरामीटर को संभालना होगा

/companies?search=Digital%26Mckinsey

और यह समस्या को हल करता है जब हम इसे एनरेल करते हैं और इसे url पर% 26 किसी भी तरह से हटा देते हैं, सर्वर पर हमें सही पैरामीटर प्राप्त होता है डिजिटल और मैकिंसे

यह लिंक बाकी वेब एपी डिजाइनिंग के सर्वोत्तम अभ्यास में मदद कर सकता है https://hackernoon.com/restful-api-designing-guidelines-the-best-practices-60e1d954e7c9


6

आपको रूट मान को एनकोड करना चाहिए और फिर (यदि आवश्यक हो) खोज से पहले मूल्य को डीकोड करें।


आपके प्रतिक्रिया के लिए धन्येवाद। क्या आप का मतलब है कि इस तरह की वस्तुओं पर एक प्रतिस्थापन * और फिर जब आप इसे पढ़ रहे हैं तो उन्हें वापस बदल दें?

क्या आप मानों को एन्कोडिंग और डिकोड करने का एक कोड उदाहरण दिखा सकते हैं?
सियारन

1

मेरे लिए, url टाइप करते समय, उपयोगकर्ता ने गलती से a / के बजाय a का उपयोग किया? क्वेरी पैरामीटर शुरू करने के लिए

उदाहरण के लिए:

url.com/endpoint/parameter=SomeValue&otherparameter=Another+value

जो होना चाहिए था:

url.com/endpoint?parameter=SomeValue&otherparameter=Another+value


हाँ, मेरे लिए भी एक ही url.com/endpoint¶meter=SomeValue&otherparameter=AnotherValue
भार्गव कोंडा

0

यह अपवाद मेरे आवेदन में हुआ और बल्कि भ्रामक था।

इसे तब फेंक दिया गया था जब मैं एक .aspx वेब कॉल का उपयोग कर रहा था, जो कि Jax सरणी ऑब्जेक्ट को पार करते हुए, अजाक्स विधि कॉल का उपयोग कर रहा था। वेब पेज विधि हस्ताक्षर में एक जोरदार-टाइप की गई .NET ऑब्जेक्ट, ऑर्डरडेट्स की एक सरणी होती है। एक्चुअल_क्यूटी प्रॉपर्टी को एक इंट के रूप में परिभाषित किया गया था, और JSON ऑब्जेक्ट एक्चुअल_क्यूटी प्रॉपर्टी में "4" (अतिरिक्त स्पेस कैरेक्टर) था। अतिरिक्त स्थान को हटाने के बाद, रूपांतरण संभव हो गया था, वेब पेज विधि को अजाक्स कॉल द्वारा सफलतापूर्वक पहुंच गया था।


0

यदि यह IIS एक्सप्रेस है तो वेब प्रोजेक्ट के सर्वर को स्थानीय IIS के रूप में उचित रूप से सेट करने का प्रयास करें। सुनिश्चित करें कि प्रोजेक्ट url सही है और कुंवारी निर्देशिका बनाएं।


0

यूनिफ़ॉर्म रिसोर्स लोकेटर (URL) से निपटने के दौरान कुछ सिंटैक्स मानक हैं , इस विशेष स्थिति में हम आरक्षित वर्णों के साथ काम कर रहे हैं ।

अप करने के लिए के रूप में RFC 3986 , सुरक्षित वर्ण (या नहीं कर सकते हैं) डिलीमीटर के रूप में सामान्य वाक्य रचना के द्वारा, या परिभाषित किया जा सकता प्रत्येक योजना विशेष वाक्य रचना द्वारा, यूआरआई के अपसंदर्भन एल्गोरिथ्म के कार्यान्वयन-विशिष्ट वाक्यविन्यास द्वारा; और तारांकन (*) एक आरक्षित चरित्र है।

सबसे अच्छा अभ्यास URL में अनारक्षित वर्ण का उपयोग करना है या आप इसे एन्कोड करने का प्रयास कर सकते हैं।

खोदते रहो :


1
यह त्रुटि तब भी होती है यदि URL में आरक्षित वर्ण %25इसके स्थान पर प्रतिशत-एन्कोडेड है, उदाहरण के लिए %, इसलिए IIS पूरी तरह से मान्य URL के लिए इस त्रुटि को वापस कर सकता है।
फ्लोरियन विंटर
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.