2012-01-10 11 views
10

मेरे पास एक एएसपी.NET एमवीसी 3 पृष्ठ है जिसमें मेरे पास एक HTML है .extAreaFor नियंत्रण, नीचे कोड देखें। अगर मैं पृष्ठ की तरह कोण कोष्ठक में पाठ के साथ http पोस्ट कार्रवाई करने के लिए प्रस्तुत करने के लिए प्रयास करें: <test>, मैं कह रहा एक पीले रंग की त्रुटि स्क्रीन मिलती है:एएसपी.NET एमवीसी 3 एचटीएमएल के लिए पोस्ट पर एचटीएमएलएन्कोड .extAreaFor

एक संभावित खतरनाक Request.Form मूल्य ग्राहक से पता चला था (RequestText = "")।

मुझे समझ नहीं आता क्यों मैं अपने आप क्योंकि मैं an article by Scott Guthrie कि कहते हैं नेट 4 में नए <%: %> वाक्य रचना पाया इस हो रही है, होगा तत्व HtmlEncode। चूंकि मैं <% का उपयोग कर रहा हूं:%> Html.TextAreaFor नियंत्रण के लिए वाक्यविन्यास, मैंने सोचा कि यह स्वचालित रूप से इसका ख्याल रखेगा और कोण ब्रैकेट को उचित "& लेफ्टिनेंट" में परिवर्तित करेगा; और "& gt" स्ट्रिंग्स।

<% using (Html.BeginForm()) 
    { %> 
    <%: Html.ValidationSummary() %> 
    <h2>Enter a description of the support needed</h2> 
    <%: Html.TextAreaFor(m => m.RequestText, 4, 90, null) %> 
    <input type="submit" value="Submit" /> 
<% } %> 

उत्तर

18

मूल रूप से अभी, आप उत्पादन पर TextAreaFor की सामग्री एन्कोडिंग रहे हैं। यह थोड़ी सी में मदद नहीं करता है के बाद से आप इनपुट से निपटने के लिए कोशिश कर रहे हैं

आप "संभावित खतरनाक" सामग्री को जमा करना चाहते हैं, तो आप या तो

1) के भीतर सजाने के लिए RequestText संपत्ति की जरूरत है [AllowHtml] के साथ आपका व्यूमोडेल। (पसंदीदा)

[AllowHtml] 
public string RequestText { get; set; } 

2) को निष्क्रिय validateRequest

<system.web> 
    <compilation debug="true" targetFramework="4.0" /> 
    <httpRuntime requestValidationMode="2.0" /> 
</system.web> 

तो फिर तुम यह सुनिश्चित करना चाहिए कि आप उचित रूप से है कि डेटा प्रतिबंध लगाया और/या अपने नियंत्रक में यह अपने भंडार लेयर या करने के लिए प्रस्तुत करने से पहले एन्कोडिंग रहे हैं डेटाबेस।

+0

चेस - मैं [AllowHtml] का उपयोग नहीं करता, क्या मेरे पास नियंत्रक कार्रवाई पर वापस पोस्ट करते समय .net फ्रेमवर्क एचटीएमएल मेरे लिए टेक्स्ट एन्कोड करने का कोई तरीका नहीं है? –

+1

आप इसे मैन्युअल रूप से नियंत्रक पर एन्कोड करते हैं। यह डेटा परत है जिसे आप अनन्य डेटा को टोन पोस्ट नहीं करना चाहते हैं। आपको इसे नियंत्रक स्तर पर संभालना होगा। –

+0

मूल रूप से, HTML आपके लिए डेटा एन्कोड नहीं कर सकता है। आप जावास्क्रिप्ट का उपयोग कर सकते हैं, लेकिन यह बस खराब है क्योंकि वे सिर्फ जेएस को अक्षम कर सकते हैं। ऐसा करने का एकमात्र निश्चित तरीका तरीका सर्वर स्तर पर है और क्लाइंट स्तर पर नहीं है। davidhayden लिंक –

6

आप AllowHtmlAttribute साथ दृश्य मॉडल पर अपने RequestText संपत्ति को सजाने कर सकते हैं:

[AllowHtml] 
public string RequestText { get; set; } 

इस तरह आप इस संपत्ति के लिए ही एचटीएमएल प्रस्तुत करने के लिए ग्राहक को प्राधिकृत कर रहे हैं।

जहां तक ​​<%: %> वाक्यविन्यास का संबंध है, इसका उपयोग पृष्ठ पर इसे आउटपुट करने से पहले कुछ मान HTML को एन्कोड करने के लिए किया जाता है। इसका उपयोग एक्सएसएस हमलों के खिलाफ सुरक्षा के लिए किया जाता है। यह आपके मामले में अप्रासंगिक है क्योंकि आप पृष्ठ पर आउटपुट नहीं कर रहे हैं, आप अनुरोध में HTML वर्ण प्राप्त कर रहे हैं।

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