再回首XSS

任何的输入都是有害的!

1. Xss的产生原因:
Xss本质是一种html注入,用户提交的不可信数据被当作html代码的一部分来执行了,从而混淆了原来的语义,产生了新的语义。

2. xss的危害:
cookie劫持
钓鱼
广告植入、信息收集、流量转发
蠕虫

3.xss payload的构造技巧
a. 利用字符编码
b. 绕过长度限制:xss payload写在别处,用简短的代码加载这段代码
c. 使用<base>标签,劫持当前页面中所有使用相对路径的资源
d. “回旋镖”打法,使反射行xss更加自动化
e. flash xss 关注allowscriptaccess,allownetworking的赋值

4.xss fuzzing的技巧
至于xss的fuzzing,有云鼎的大佬总结的很好了,我就不再搬砖了。看链接
https://www.qcloud.com/community/article/172258001490259493

5.xss的防御
a. httponly防范cookie劫持
b. 输入检查(xss filter),但是要注意xss filter对URL没办法过滤,并且有可能会改变用户数据的语义
c. 输出检查:编码或者转义
d. xss发生在mvc的view层,大部分xss漏洞可以在模版系统中解决,目前多数web开发框架默认所有变量会被转义

6.正确的防御xss
view层发生的问题,在view层解决是最好的,所以输出检查是最好的防御方式,但是对于不同的场景防御办法是不同的。
1.使用HtmlEncode的情形:
a. 在html标签中输出
b. 在html属性中输出

2.使用JavascriptEncode的情形:
a.在<script>标签中输出
b.在实践中输出

3.使用 encodeforCSS():的情形: css(层叠样式表)中输出

4.使用UrlEncode的情形: 地址中输出时,要先判断为协议,是不是为http,然后UrlEncode

5.富文本场景下:不需要事件,尽量使用白名单,有现成的好用的真对富文本的xss filter,比如anti-samy和p神的XssHtml:https://github.com/phith0n/XssHtml

6.对于DOMbasedXSS,因为不是简单的服务器返回输出到html,而是服务器返回给js,js输出到html,故要做两次转义。从$var到<script>要做一次javascriptencode,然后js到html也相当一场xss的输出过程,也要做一次转义,如果是输出事件或者脚本需要javascriptencode,如果是html或者属性,则需要htmlencode

发表评论

电子邮件地址不会被公开。 必填项已用*标注