Wednesday 15 April 2015

ASP.NET MVC A potentially dangerous Request.Form value was detected from the client when using a custom modelbinder -


यहां त्रुटि आ रही है:

  ValueProviderResult मूल्य = bindingContext.ValueProvider.GetValue ( "ConfirmationMessage ");   

मैं केवल मूल्यों के चयन पर कैसे अनुमति देता हूं? यानी

  [ValidateInput (गलत)] सार्वजनिक वस्तु BindModel (ControllerContext controllerContext, ModelBindingContext bindingContext) {ValueProviderResult मूल्य = bindingContext.ValueProvider.GetValue ( "ConfirmationMessage")।; ValueProviderResult मान 2 = बाध्यकारीकॉन्टेक्स्ट। ValueProvider.GetValue ("ConfirmationMessage2"); }    

आपके पास कुछ विकल्प हैं।

मॉडल पर इस विशेषता को प्रत्येक प्रॉपर्टी में जोड़ें, जिसे आपको HTML - सर्वश्रेष्ठ विकल्प

  का उपयोग करने की आवश्यकता है System.Web.Mvc; [AllowHtml] सार्वजनिक स्ट्रिंग SomeProperty {get; सेट; }   

पर नियंत्रक कार्रवाई की अनुमति देने के लिए इस विशेषता जोड़ने सभी HTML

  [ValidateInput (गलत)] public ActionResult SomeAction (MyViewModel myViewModel)  Web.config में ब्रूट बल -  निश्चित रूप से अनुशंसित नहीं है   

वेब। कॉन्फिग फाइल में, टैग के भीतर, httpRuntime तत्व को विशेषता अनुरोध के साथ डालें ValidationMode = "2.0"। इसके साथ ही पृष्ठों तत्व में validateRequest = "false" विशेषता को जोड़ें।

  & lt; कॉन्फ़िगरेशन & gt; & LT; system.web & gt; & Lt; httpRuntime requestValidationMode = "2.0" / & gt; & LT; /system.web> & Lt; पृष्ठों मान्य करें अनुरोध = "गलत" & gt; & Lt; / पृष्ठों & gt; & Lt; / विन्यास & gt;   

और जानकारी:

उपरोक्त काम डिफ़ॉल्ट मॉडलबेंडर के उपयोग के लिए

कस्टम मॉडलबिंडर

ऐसा लगता है कि ऊपर दिए गए कोड में बाध्यकारी कंसोर्ट। वेल्यूप्रॉवेयर.गेट वैल्यू () को कॉल हमेशा डेटा को मान्य करता है, भले ही कोई विशेष गुण हो। ASP.NET MVC स्रोतों में खुदाई पता चलता है कि DefaultModelBinder पहले चेकों अनुरोध सत्यापन की आवश्यकता होती है और उसके बाद एक पैरामीटर इंगित करता है कि यदि सत्यापन की आवश्यकता है या नहीं है के साथ bindingContext.UnvalidatedValueProvider.GetValue () विधि कॉल।

दुर्भाग्य से हम किसी भी रूपरेखा कोड का उपयोग नहीं कर सकते क्योंकि यह सील, निजी या खतरनाक सामानों से अनभिज्ञ देवों की रक्षा करने के लिए कुछ भी है, लेकिन यह एक कामकाजी कस्टम बनाने में मुश्किल नहीं है मॉडल बांधने की मशीन है कि AllowHtml और ValidateInput का सम्मान करता है जिम्मेदार बताते हैं:

  सार्वजनिक वर्ग MyModelBinder: IModelBinder {सार्वजनिक वस्तु BindModel (ControllerContext controllerContext, ModelBindingContext bindingContext) {// पहले जांच कर लें अनुरोध सत्यापन की आवश्यकता है वर shouldPerformRequestValidation = controllerContext । नियंत्रक। वैध पुष्टि और amp; bindingContext.ModelMetadata.RequestValidationEnabled; // मान प्राप्त करें var मानप्रदाता: रिजल्ट = बाध्यकारी कंटबॉक्स। GetValueFromValueProvider (shouldPerformRequestValidation); अगर (valueProviderResult! = नल) {var theValue = valueProviderResult.AttemptedValue; // आदि ...}}}   

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

  सार्वजनिक स्टेटिक क्लास एक्सटेंशन हेल्पर {सार्वजनिक स्थिर मूल्यप्रदाताकर्ता परिणाम GetValueFromValueProvider (यह ModelBindingContext बाइंडिंग कंटैक्स, बूल वर्क्वेवेटिवेटिगेशन) {var unvalidatedValueProvider = bindingContext.ValueProvider IUnvalidatedValueProvider; वापसी (अमान्यकृत वैल्यू प्रदाता! = नल)? unvalidatedValueProvider.GetValue (bindingContext.ModelName, performRequestValidation!): bindingContext.ValueProvider.GetValue (bindingContext.ModelName); }}   

इस पर अधिक जानकारी

No comments:

Post a Comment