encodeForHtml()
(CF10の新機能)とhtmlEditFormat()
、どのように違いますか?
2 に答える
これは、JavaのOWASPESAPIのencodeForHTML関数と同じだと思います。HTMLのコンテンツを使用するXSS攻撃を回避するためのより安全な方法。
<cfsavecontent variable="htmlcontent">
<html>
<head>
<script>function hello() {alert('hello')}</script>
</head>
<body>
<a href="#bookmark">Book Mark & Anchor</a><br/>
<div class="xyz">Div contains & here.</div>
<IMG SRC=javascript:alert(&# x27XSS')>
<IMG SRC=javascript:alert('XSS')>
</body>
</html></cfsavecontent>
<cfoutput>#htmleditformat(htmlcontent)#</cfoutput>
<br />
<cfoutput>#encodeforhtml(htmlcontent)#</cfoutput>
EncodeFor *関数は、OWASPESAPIライブラリに基づいています。主な違いは、HTMLEditFormat()は、のような「悪い」文字列を、のような良い文字列に置き換えるだけです。&
一方<
、>
EncodeForHTML &
()はよりスマートであり、すでにエンコードされているコンテンツを認識でき、二重エンコードされないという利点があります<
。>
。
たとえば、ユーザーが次のコンテンツをサイトに送信した場合:
<div>
Here is <i>test</i> html content includes<br/>
<script>alert('hello')</script>
Notice how & rendered with both functions.
</div>
HTMLEditFormat()とEncodeForHTML()はどちらも、「<」と「>」の文字を適切にエスケープします。しかし、HTMLEditFormat()は、出力が次のようになるように、再び盲目的にエンコード&
します。
... how &amp; rendered ...
それ以外の場合はencodeForHTML()のようになります。
... how & rendered ...
HTMLEditFormat()は、アンパサンドがすでにエンコードされていることを認識できなかったため、再度エンコードしました。これは簡単な例ですが、ESAPIライブラリがよりスマートであり、したがってより安全であることを示しています。
結論として、CF10 +でHTMLEditFormat()を使用する理由はありません。最大限の保護を得るには、フォーマット関数をエンコード関数に置き換える必要があります。
上記の完全な例とその他の背景は、isummationにあります:http ://www.isummation.com/blog/day-2-avoid-cross-site-scripting-xss-using-coldfusion-10-part-1/