赞
踩
xss 中文名是“跨站脚本攻击”,英文名“Cross Site Scripting”。
xss也是一种注入攻击,当web应用对用户输入过滤不严格,攻击者写入恶意的脚本代码(HTML、JavaScript)到网页中时,如果用户访问了含有恶意代码的页面,恶意脚本就会被浏览器解析执行导致用户被攻击。
常见的危害有:cookie窃取,session劫持,钓鱼攻击,蠕虫,ddos等。
xss根据特性和利用方式可以分成三大类,反射型xss 、存储型xss、dom型xss
一般出现在URL参数中,以及网站搜索栏中,由于需要点击包含恶意代码的URL才可以触发,并且只能触发一次,也称为非持久性xss。这种在一些较老的项目中最常见。
一般出现在留言板上,评论处,个人资料填写,等需要用户可以对网站写入数据的地方,比如一个论坛处由于对用户输入过滤不严格,导致攻击者在写入一段窃取cookie的恶意JavaScript代码到评论处,这段恶意代码会写入数据库中,当其他用户浏览写入代码的页面时,网站从数据库中读取恶意代码显示到网页中被浏览器执行,导致用户的cookie被窃取攻击者无需受害者密码既可以登陆账户,所以也被成为持久性xss,持久性xss比反射性xss危害性大得多。
DOM xss是基于dom文件对象模型的,前端脚本通过dom动态修改页面,由于不予服务端运行交互,而且代码是可见的,从前端获取dom中的数据在本地执行。常见的可以操作的dom对象有:url、location、referrer等。dom型的xss比较特殊,是一种基于dom树的xss,服务器端经常使用document.body.innertHtml等动态函数生成HTML页面,如果这些函数在引用某些变量时没有进行过滤检查,就会产生dom型的xss。dom型的xss可能是存储型的也可能是反射性的。
前端方面:较低版本的jquery,很多都存在xss漏洞,更多的是dom型xss漏洞,解决方法:1.x版本的jquery,建议升级到1.12.4或者更新的版本,2.x,3.x的我不太清楚,但是尽量使用教新版本的jquery
代码上的处理:针对反射型和存储型的xss,目前处理方式有下面几种:
将其关键字,标签替换成空字符串(建议使用正则),同时将敏感的半角字符替换成全角字符,注意host头,header,getParameter等都需要过滤下,这种方式相对来说暴力点,但是能够从根源上解决问题,缺点是可能会造成部分数据不完整。
也就是将html转义字符,比如<的转义字符为< ,>的转义字符为> ,也可以使用org.apache.commons.lang.StringEscapeUtils.escapeHtml(str)来转义。缺点是入库时候,它的长度要比请求时候的长度要长。注意某些场景下,可能需要将其进行反转义。
在某些的场景下,可以对用户输入的内容进行检查(建议最少要后端检查一次,必要的话,也可以加一步前端检查),如果含有xss相关的特殊字符的话,就不让其进行进一步的请求/处理。
json参数的话(@requestBody),重写jackson的MappingJackson2HttpMessageConverter的反序列化方法(deserialize),重写的时候处理下xss参数,同时注入bean对象为自定义的MappingJackson2HttpMessageConverter
web安全无小事,需谨慎处理。以上是我个人对xss的理解所做出的处理,如果有更好的处理方法的话,也欢迎大家来补充
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。