2012-05-15 6 views

उत्तर

9

मुझे लगता है कि यह जावा के ओडब्ल्यूएएसपी ईएसएपीआई में एनकोडफॉरएचटीएमएल फ़ंक्शन जैसा ही है। एचटीएमएल में सामग्री का उपयोग करने के लिए एक्सएसएस हमले से बचने के लिए और अधिक सुरक्षित।

<cfsavecontent variable="htmlcontent"> 
<html> 
    <head> 
     <script>function hello() {alert('hello')}</script> 
    </head> 
    <body> 
     <a href="#bookmark">Book Mark &amp; Anchor</a><br/> 
     <div class="xyz">Div contains & here.</div> 
     <IMG  SRC=&#x6A&#x61&#x76&#x61&#x73&#x63&#x72&#x69&#x70&#x74&#x3A&#x61&#x6C&#x65&#x72&#x74&#x28&# x27&#x58&#x53&#x53&#x27&#x29> 
    <IMG SRC=&#0000106&#0000097&#0000118&#0000097&#0000115&#0000099&#0000114&#0000105&#0000112&#0000116&#0000058&#0000097&#0000108&#0000101&#0000114&#0000116&#0000040&#0000039&#0000088&#0000083&#0000083&#0000039&#0000041> 
</body> 
</html></cfsavecontent> 

<cfoutput>#htmleditformat(htmlcontent)#</cfoutput> 
<br /> 
<cfoutput>#encodeforhtml(htmlcontent)#</cfoutput> 
+2

अजीब लगता है कि वे सिर्फ एक और विशेषता के माध्यम से पहले से मौजूद टैग में वृद्धि नहीं होगी यह अधिक सुरक्षित बनाने के लिए या सिर्फ सादा यह बॉक्स से बाहर बढ़ाने के लिए। – Snipe656

+3

ठीक है, encodeForHtml() एक सेट का हिस्सा है: encodeForCss(), encodeForJavascript(), encodeForHtmlAttribute(), आदि। यह भी मूल HTMLEditFormat() से अधिक भागने वाला है। – ale

+4

चूंकि वे अलग-अलग आउटपुट का उपयोग करते हैं, इसलिए उन्होंने मौजूदा टैग को संशोधित करने के बजाय पहले उल्लिखित सेट के हिस्से के रूप में एक नया टैग जोड़ा है। यह मौजूदा कोड के साथ पिछड़ा संगतता बनाए रखने में मदद करता है। –

5

एनकोडफ़ोर * फ़ंक्शन OWASP ESAPI पुस्तकालयों पर आधारित होते हैं। मुख्य अंतर यह है कि HTMLEditFormat() केवल बदल देता है "बुरा" तार, &, < और अच्छे तार के साथ >, जैसे &amp;, &lt; और &gt; जबकि EncodeForHTML() होशियार है, एक लाभ किया जा रहा है यह सामग्री पहले से ही एन्कोड किया गया है कि पहचान सकते हैं के साथ की तरह और इसे डबल-एन्कोड नहीं करें।

उदाहरण के लिए, यदि कोई उपयोगकर्ता प्रस्तुत अपनी साइट में निम्न सामग्री यदि:)

<div> 
Here is <i>test</i> html content includes<br/> 
<script>alert('hello')</script> 
Notice how &amp; rendered with both functions. 
</div> 

दोनों HTMLEditFormat (और EncodeForHTML() ठीक से '<' और '>' वर्ण से बचें होगा। लेकिन HTMLEditFormat() आँख बंद करके सांकेतिक शब्दों में बदलना होगा & फिर से इस तरह है कि अपने उत्पादन लगता है:

... how &amp;amp; rendered ...

कहाँ यह अन्यथा encodeForHTML() के साथ दिखाई देगा:

... how &amp; rendered ...

HTMLEditFormat() सका यह नहीं बताता कि एम्पर्सेंड पहले से ही एन्कोड किया गया था, इसलिए इसे फिर से एन्कोड किया गया। यह एक मामूली उदाहरण है, लेकिन यह दर्शाता है कि ईएसएपीआई पुस्तकालय कैसे स्मार्ट हैं और इसलिए, अधिक सुरक्षित हैं।

नीचे पंक्ति, CF10 + में HTMLEditFormat() का उपयोग करने का कोई कारण नहीं है। अधिकतम सुरक्षा के लिए, आपको प्रारूप कार्यों को एनकोड फ़ंक्शन के साथ प्रतिस्थापित करना चाहिए।

ऊपर पूर्ण उदाहरण और अधिक पृष्ठभूमि isummation पर कर रहे हैं: http://www.isummation.com/blog/day-2-avoid-cross-site-scripting-xss-using-coldfusion-10-part-1/

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