一 XSS攻击进阶
1 XSS攻击平台
攻击平台的主要目的就是为了演示xss的危害,以及方便测试使用,常见的有attack API,BeFF,XSS-Proxy
2终极武器:XSSWorm
(以往的蠕虫都是利用服务器端软件漏洞进行传播的)
像有名的samy worm和百度空间蠕虫
xss worm攻击是有一定条件的:一般来说,用户之间发生交互行为的页面,如果存在存储型XSS,则比较容易发起XSS worm攻击。
3xss构造技巧
比如利用字符编码,
绕过长度限制(某些环境下可以用注释符绕过长度限制),
使用<base>标签,
Window.name的妙用(window对象是浏览器的窗体,而并非document对象,因此很多时候window对象不受同源策略的限制)
4容易被忽略的角落:Flash XSS
前面的XSS攻击都是基于HTML的,其实在flash中同样也会造成xss攻击。
限制flash动态脚本的最重要的参数:allowscriptaccess
控制flash与外部网络进行通信:allowNetworking
5javascript开发框架真的高枕无忧吗
目前最为流行的jQuery,框架只是对JavaScript语言本身的封装,并不能解决代码逻辑上产生的问题。在jQuery中有一个html()方法,这个方法如果没有参数,就是读取一个DOM节点的innerHTML,如果有参数,则会把参数值写入该节点的DOM节点的innerHTML中,这个过程会产生dom based xss.
二xss的防御
1httponly
严格的说:httponly并非为了对抗XSS-httponly解决的是xss后的cookie劫持攻击,httponly是在set-cookie时标记的。
但是xss攻击带来的不光是cookie劫持问题,还有窃取用户信息,模拟用户身份执行操作等诸多严重后果。
2输入检查
检查逻辑必须放在服务器代码中实现,如果只在客户端中,很容易被绕过。
现在普遍做法,是在客户端JavaScript和服务器端同时检测,客户端的检测可以阻断大部分攻击,从而节约服务器资源。
3输出检查
htmlencode ,javascriptencode,xmleccode......(安全编码函数)
xss攻击主要发生在MVC架构中的view层。
导致xss攻击发生的原因,并不是使用auto-escape就万事大吉了,xss的防御要区分情况对待。
4正确地防御XSS
xss产生的本质原因:
xss的本质还是一种HTML注入,用户的数据被当成了HTML代码一部分执行,从而混淆了原本的语义,产生了新的语义。
如果网站使用了MVC架构,那么xss就发生在view层,在应用拼接变量到HTML页面时产生。那么用户提交数据进行输入检查的方案,其实并不是在真正发生攻击的地方做防御。
在HTML标签中输出,在HTML属性中输出,在<script>标签中输出,在事件中输出。在css中输出等等各有自己的防御方法。
5处理富文本(允许用户提交一些自定义的html代码)
HTML是一种结构性语言,比较好分析,通过htmlparser可以解析出HTML代码的标签,标签属性和事件
在过滤富文本时,不应该包括事件这种动态效果,在标签选择上,应该使用白名单,避免使用黑名单。
过滤css时,需要一个cssparser 对样式进行智能分析。
6防御dom based xss
一些函数导致需要分语境使用不同的编码函数。