代码改变世界

网站安全系列:跨站脚本攻击XSS

2013-10-02 13:49  dreamhappy  阅读(1178)  评论(0编辑  收藏  举报

本篇博文主要从概念和应用上介绍XSS,主要内容来源于《白帽子讲web安全》

XSS核心本质

XSS实际上是一种HTML注入,用户输入的数据被当成HTML的一部分来执行。防御方法核心是输入检查和输出编码。

对于Web应用长见的MVC模式,XSS主要攻击View层。

XSS攻击是在用户的浏览器上执行,形成过程则是服务端页面渲染时,注入了恶意的HTML代码导致。

在ASP.NET MVC中razor默认会对所有输出进行html编码。这是ASP.NET MVC针对XSS攻击的一道防火墙

防御方法

一 HttpOnly设置Cookie, 解决Cookie劫持问题,浏览器将禁止页面javascript访问带有HttpOnly属性的cookie

二 使用输出编码

如使用 HTML 编码一个字符串的含意是什么呢?使用 HTML 编码字符串时,危险字符如 < 和 > 被替换为 HTML 实体,如 &lt; 和 &gt;。所以,当使用 HTML 编码字符串 <script>alert(“Boo!”)</script>时,它将转换为 &lt;script&gt;alert(“Boo!”)&lt;/script&gt;。浏览器在解析编码的字符串时不再执行 JavaScript 脚本。而是显示无害的页面

1 HTML中的变量输出使用HtmlEncode编码

2 在JavaScript的Script中输出,应该确保输出的变量在引号中。防御方法是使用JavaScriptEncode编码

3 在JavaScript事件中输出也是使用JavaScriptEncode编码

4 编码URL

5 处理CSS

三 客户端和服务端双重验证数据

总结:尽量控制用户可控制的变量在 Script HTML标签的Stype以及Css中输出

处理富文本

遵循输入检查的思路,过滤富文本标签,严格不包含事件。在自定义样式的同时需要处理CSS。

考虑到文本样式等问题,需要考虑的因素有 换行标签,空格,硬空格,P标签等。

如果这篇博文对你有帮助,点击推荐支持下吧

参考

Javascript注入攻击