【产品技术】XSS攻击类型简介(防御篇)
HttpOnly
许多 XSS 攻击的目的就是为了获取用户的 cookie,将重要的 cookie 标记为 http only,这样的话当浏览器向服务端发起请求时就会带上 cookie 字段,但是在脚本中却不能访问 cookie,这样就避免了 XSS 攻击利用 js 的 document.cookie获取 cookie。
HttpOnly 并非阻止 XSS 攻击,而是能阻止 XSS 攻击后的 Cookie 劫持攻击。
输入检查
输入指客户端请求参数,具体包括:
· 用户输入
· URL 参数
· POST 参数
针对 HTML 代码的编码方式是 HTMLEncode,它的作用是将字符串转换成 HTMLEntities。目前来说,为了对抗 XSS,需要对以下六个字符进行实体化转义。
输出检查
输出需要转义的部分,具体包括:
· 在 HTML 中输出
· 在 JavaScript 中输出
· 在 CSS 中输出
· 在 URL 中输出
在 HTML 中的输出
HTML 的部分和输入的转义方式相同,使用 HTMLEncode,此处不再复述。
在 JavaScript 中的输出
JavaScript 的部分同样需要编码转义,比如在 JSONP 中可以通过意外截断 JSON 数据或者在页面中玩转引号来造成 XSS 攻击。
· let a = "我是变量"
· // 我是变量 = ";alert(1);//
· a = "";alert(1);//"
攻击者只需要闭合标签就能实行攻击,目前的防御方法就是 JavaScriptEncode。JavaScriptEncode 与 HTMLEncode 的编码方式不同,它需要用 \ 对特殊字符进行转义。
在 CSS 中的输出
在 CSS 中或者 style 标签中的攻击花样特别多,要解决 CSS 的攻击问题,一方面要严格控制用户将变量输入 style 标签内,另一方面不要引用未知的 CSS 文件,如果一定有用户改变 CSS 变量这种需求的话,可以使用 OWASP ESAPI 中的 encodeForCSS() 函数。
在 URLEncode 中的输出
在 URL 中的输出直接使用 URLEncode 即可,需要转义变量的部分。
处理富文本
l 首先例行进行输入检查,保证用户输入的是完整的 HTML 代码,而不是有拼接的代码
l 通过 htmlParser 解析出 HTML 代码的标签、属性、事件
l 富文本的事件肯定要被禁止,因为富文本并不需要事件这种东西,另外一些危险的标签也需要禁止,例如: <iframe>,<script>,<base>,<form>等
l 利用白名单机制,只允许安全的标签嵌入,例如:<a>,<img>,div等,白名单不仅仅适用于标签,也适用于属性
l 过滤用户 CSS,检查是否有危险代码
此外,还有防御DOM Based XSS等防御方式等等。
- 点赞
- 收藏
- 关注作者
评论(0)