XSS 漏洞原理及防护方法

XSS跨站脚本攻击:两种状况。一种经过外部输入而后直接在浏览器端触发,即反射型XSS;还有一种则是先把利用代码保存在数据库或文件中,当web程序读取利用代码并输出在页面上时触发漏洞,即存储型XSS。DOM型XSS是一种特殊的反射型XSS。html

危害:前端页面能作的事它都能作。(不单单盗取cookie、修改页面等)前端

一、 挖掘经验

XSS挖掘的关键在于寻找有没有被过滤的参数,且这些参数传入到输出函数。web

经常使用输出函数:print、print_r、echo、printf、sprintf、die、var_dump、var_export,因此只要寻找带有变量的这些函数便可。正则表达式

XSS漏洞挖掘受浏览器影响比较大,最重要的还要掌握各类浏览器容错、编码等特性和数据协议。数据库

常出现场景:文章发表、评论、留言、注册资料的地方、修改资料的地方等;浏览器

二、 反射型XSS

黑盒测试时:只须要将尖括号、单双引号等提交到web服务器,检查返回的html页面里面有没有保留原来的特殊字符便可判断;服务器

白盒测试时:只需寻找带有参数的输出函数,而后根据输出函数对输出的内容回溯输入参数,观察有没有过滤;cookie

例如:网络

clip_image001

代码中:oauth_signature 参数未经任何过滤,直接输出,则能够直接用GET方式注入代码。函数

三、 存储型XSS

就是须要先把利用代码保存在例如数据库或文件中,当web 应用程序读取利用代码并输出在页面上时执行利用代码,原理图流程以下:

clip_image002

存储型XSS比反射型要容易利用的多,不用考虑绕过浏览器的过滤,在隐蔽性上也要好得多。特别在社交网络中的存储型XSS蠕虫能形成大面积的传播,影响很是大。

挖掘存储型XSS:寻找未过滤的输入点和未过滤的输出函数,这个最终的输出点可能和输入点彻底不在一个业务流上,对于这类能够根据当前代码功能去猜想,或追踪哪里有操做过这个数据,使用表名、字段名去代码里面搜索。

四、 漏洞防范

(1) 特殊字符HTML实体转码。最好的过滤方式是在输出和二次调用的时候进行加HTML实体一类的转码,防止脚本注入。

(2) 标签事件属性黑名单。特殊字符容易被绕过,因此还得加标签事件得黑名单或者白名单,这里推荐使用白名单的方式,实现规则能够直接使用正则表达式来匹配,若是匹配到的事件不在白名单列表,就能够直接拦截,而不是过滤为空。

相关文章
相关标签/搜索