【产品技术】XSS攻击类型简介(防御篇)

举报
懒宅君 发表于 2020/06/27 15:27:00 2020/06/27
【摘要】 HttpOnly许多 XSS 攻击的目的就是为了获取用户的 cookie,将重要的 cookie 标记为 http only,这样的话当浏览器向服务端发起请求时就会带上 cookie 字段,但是在脚本中却不能访问 cookie,这样就避免了 XSS 攻击利用 js 的 document.cookie获取 cookie。HttpOnly 并非阻止 XSS 攻击,而是能阻止 XSS 攻击后的 C...

HttpOnly

许多 XSS 攻击的目的就是为了获取用户的 cookie,将重要的 cookie 标记为 http only,这样的话当浏览器向服务端发起请求时就会带上 cookie 字段,但是在脚本中却不能访问 cookie,这样就避免了 XSS 攻击利用 js 的 document.cookie获取 cookie。

HttpOnly 并非阻止 XSS 攻击,而是能阻止 XSS 攻击后的 Cookie 劫持攻击。


输入检查

输入指客户端请求参数,具体包括:

·       用户输入

·       URL 参数

·       POST 参数

针对 HTML 代码的编码方式是 HTMLEncode,它的作用是将字符串转换成 HTMLEntities。目前来说,为了对抗 XSS,需要对以下六个字符进行实体化转义。

image.png

输出检查

输出需要转义的部分,具体包括:

·       在 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等防御方式等等。

 


【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0)

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。