本篇博文主要从概念和应用上介绍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 实体,如 < 和 >。所以,当使用 HTML 编码字符串 <script>alert(“Boo!”)</script>时,它将转换为 <script>alert(“Boo!”)</script>。浏览器在解析编码的字符串时不再执行 JavaScript 脚本。而是显示无害的页面
1 HTML中的变量输出使用HtmlEncode编码
2 在JavaScript的Script中输出,应该确保输出的变量在引号中。防御方法是使用JavaScriptEncode编码
3 在JavaScript事件中输出也是使用JavaScriptEncode编码
4 编码URL
5 处理CSS
三 客户端和服务端双重验证数据
总结:尽量控制用户可控制的变量在 Script HTML标签的Stype以及Css中输出
处理富文本
遵循输入检查的思路,过滤富文本标签,严格不包含事件。在自定义样式的同时需要处理CSS。
考虑到文本样式等问题,需要考虑的因素有 换行标签,空格,硬空格,P标签等。
如果这篇博文对你有帮助,点击推荐支持下吧
参考