正确地防御XSS

摘自《白帽子讲web安全》第三章

 

XSS的本质是一种“HTML注入”,用户的数据被当成了HTML代码一部分来执行,从而混淆了原本的语义,产生了新的语义。

 

在HTML标签中输出,在HTML属性中输出

防御方法:对变量使用HtmlEncode

 

在<script>标签中输出

防御:使用JavascriptEncode

 

在事件中输出

防御:使用JavascriptEncode

 

在CSS中输出

防御:尽可能禁止用户可控制的变量在“<style>标签”、“HTML标签的style属性”以及“CSS文件”中输出。如果一定有这样的需求,则推荐使用OWASP ESAPI中的encodeForCSS()函数。

 

在地址中输出

防御:一般来说,在URL的path(路径)或者search(参数)中输出,使用URLEncode即可。

如果变量是整个URL,则应该先检查变量是否以“http”开头(如果不是则自动添加),以保证不会出现伪协议类的XSS攻击。在此之后,再对变量进行URLEncode,即可保证不会有此类的XSS发生了。

 

HTML Encoding escapes special characters in strings used in HTML documents to prevent confusion with HTML elements like changing.

 

"<hello>world</hello>"

to

"&lt;hello&gt;world&lt;/hello&gt;"

posted @ 2012-12-11 14:26  酱油猫  阅读(181)  评论(0编辑  收藏  举报