【产品技术】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);//"

攻击者只需要闭合标签就能实行攻击,目前的防御方法就是 JavaScriptEncodeJavaScriptEncode 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个月内不可修改。