HTML स्ट्रिंग्स को लिखना / आउटपुट करना अनकैप्ड है


436

मैं सुरक्षित / sanitized HTML एक DB तालिका में सहेजा गया है।

मैं इस HTML सामग्री को रेजर व्यू में कैसे लिख सकता हूं?

यह हमेशा <और ampersands जैसे पात्रों से बच जाता है &amp;


76
लोगों को चर्चा के लंबे इतिहास को बचाने के लिए -@Html.Raw()
क्रिस एस

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

जवाबों:


653

अपनी सामग्री को नाम देना एक स्ट्रिंग के अंदर है mystring...

आप उपयोग कर सकते हैं:

@Html.Raw(mystring)

वैकल्पिक रूप से आप अपने स्ट्रिंग को HtmlStringया किसी अन्य प्रकार में परिवर्तित कर सकते हैं IHtmlStringजो मॉडल या सीधे इनलाइन में लागू होता है और नियमित रूप से उपयोग होता है @:

@{ var myHtmlString = new HtmlString(mystring);}
@myHtmlString

इस उत्तर के लिए धन्यवाद। मेरे द्वारा सीखे गए एक छोटे से काम को पूरा करने में मेरी मदद की। :) हालाँकि मैं MVC3 के नवीनतम संस्करण का उपयोग कर रहा हूँ और अब तक कोई Html.Raw :(

1
हाय सर्जियो। मैं MVC 3 का उपयोग कर रहा हूं और मैं रॉ विधि का ठीक से उपयोग कर रहा हूं।
गुई

1
जवाब के लिए धन्यवाद! मैं अभी भी एमवीसी 3 सीख रहा हूं और यह मुझे खत्म कर रहा है।
टॉड रिचर्डसन

3
@ लोरेंजो, +1 मैं razorवाक्य रचना के साथ नवीनतम एमवीसी 3 का उपयोग कर रहा हूं और Html.Rawनिश्चित रूप से मेरे लिए उपलब्ध है।
क्रिस स्नोडेन

1
लोरेंजो, मैंने एमवीसी बीटा के उल्लेख को हटाने के लिए अपडेट किया है क्योंकि यह कुछ साल पहले था। वापस करने के लिए स्वतंत्र महसूस / परिवर्तन।
अलेक्सई लेवेनकोव

75

ASP.NET MVC 3 में आपको कुछ इस तरह करना चाहिए:

// Say you have a bit of HTML like this in your controller:
ViewBag.Stuff = "<li>Menu</li>"
//  Then you can do this in your view:
@MvcHtmlString.Create(ViewBag.Stuff)

13
मैं इस विधि को पसंद करता हूं क्योंकि HTML.Raw उड़ जाता है यदि पारित स्ट्रिंग शून्य है।
37Stars

1
धन्यवाद, यह बहुत साफ है!
हज्जत

64

आप उपयोग कर सकते हैं

@{ WriteLiteral("html string"); }

5
यह मेरे लिए भयानक था, ईमेल भेजने के लिए एक हैंगफायर ऐप के भीतर रेजर का उपयोग कर रहा था ... Html.Raw()वहाँ काम नहीं करता है
शनाबस

राइटलेटरल के लिए 1
तुलसी

11

कभी-कभी कच्चे html का उपयोग करना मुश्किल हो सकता है। ज्यादातर XSS भेद्यता के कारण। यदि यह एक चिंता का विषय है, लेकिन आप अभी भी कच्चे HTML का उपयोग करना चाहते हैं, तो आप डरावने भागों को एन्कोड कर सकते हैं।

@Html.Raw("(<b>" + Html.Encode("<script>console.log('insert')</script>" + "Hello") + "</b>)")

का परिणाम

(<b>&lt;script&gt;console.log('insert')&lt;/script&gt;Hello</b>)

4

आप नियंत्रक की तरह अपने स्ट्रिंग को व्यूडाटा में रख सकते हैं:

 ViewData["string"] = DBstring;

और फिर उस दृश्य को इस तरह देखें:

@Html.Raw(ViewData["string"].ToString())

2

@MvcHtmlString.Create(ViewBag.Stuff) डोमर द्वारा सुझाए अनुसार उपयोग करने के अलावा , मैं आपको सुझाव देता हूं कि आप एंटीएक्सएसएस लाइब्रेरी का भी उपयोग करें, जैसा कि सुझाव दिया गया है http://haacked.com/archive/2010/04/06/using-antixss-as-the-default-encoder-for-asp -net.aspx

यह लगभग सभी संभावित XSS हमले स्ट्रिंग को एन्कोड करता है।


0

RazorEngine में टेम्पलेट फ़ंक्शंस का उपयोग करने के लिए पूरा उदाहरण (ईमेल पीढ़ी के लिए, उदाहरण के लिए):

@model SomeModel
@{
    Func<PropertyChangeInfo, object> PropInfo =
        @<tr class="property">
            <td>
                @item.PropertyName                
            </td>
            <td class="value">
                <small class="old">@item.OldValue</small>
                <small class="new">@item.CurrentValue</small>                
            </td>
        </tr>;
}

<body>

@{ WriteLiteral(PropInfo(new PropertyChangeInfo("p1", @Model.Id, 2)).ToString()); }

</body>
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.