Hen*_*nry 9 coldfusion esapi coldfusion-10
encodeForHtml()(CF10中的新内容)vs htmlEditFormat(),它们有何不同?
Pri*_*tel 10
我认为它与java的OWASP ESAPI中的encodeForHTML函数相同.更安全,以避免XSS攻击使用HTML中的内容.
<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>
Run Code Online (Sandbox Code Playgroud)
EncodeFor*函数基于OWASP ESAPI库.主要的区别是,HTMLEditFormat()仅仅是替代"坏"的字符串,像&,<并>具有良好的字符串,如&,<和>而EncodeForHTML()是聪明,有一个优点是它可以识别出已被编码,而不是双重编码它的内容.
例如,如果用户向您的网站提交了以下内容:
<div>
Here is <i>test</i> html content includes<br/>
<script>alert('hello')</script>
Notice how & rendered with both functions.
</div>
Run Code Online (Sandbox Code Playgroud)
HTMLEditFormat()和EncodeForHTML()都可以正确地转义'<'和'>'字符.但是HTMLEditFormat()会盲目地对其进行编码,&使得输出看起来像:
... how &amp; rendered ...
使用encodeForHTML()在其他地方看起来像:
... how & rendered ...
HTMLEditFormat()无法分辨出&符号已被编码,因此它再次重新编码.这是一个简单的例子,但它演示了ESAPI库如何更智能,因此更安全.
最重要的是,没有理由在CF10 +中使用HTMLEditFormat().为了获得最大程度的保护,您应该使用Encode功能替换Format功能.
上面的完整示例和更多背景信息是:http://www.isummation.com/blog/day-2-avoid-cross-site-scripting-xss-using-coldfusion-10-part-1/
| 归档时间: |
|
| 查看次数: |
7357 次 |
| 最近记录: |