大家都说XSS是一门又热门又不太受重视的Web攻击手法,因为其耗时间、有一定几率不成功、没有相应的软件来完成自动化攻击、是一种被动的攻击手法等。但是由于XSS攻击成本不高且不易被检测到,而且服务端安全问题越来越被重视,XSS攻击在客户端方面还是比较受欢迎的。
XSS攻击:跨脚本攻击。是最常见的一种web安全漏洞,其原理是攻击者向有XSS漏洞的网站中输入(传入)恶意的HTML代码,当其它用户浏览该网站时,这段HTML代码会自动执行,从而达到攻击的目的。
XSS主要分为三类:反射型XSS、存储型XSS和DOM-XSS。
反射型XSS:主要做法是将脚本代码加入URL地址的请求参数里,请求参数进入程序后在页面直接输出,用户点击类似的恶意链接就可能受到攻击。
存储型XSS:主要是应用程序从数据库中查询数据,在页面中显示出来,攻击者在相关页面输入恶意的脚本数据后,用户浏览此类页面时就可能受到攻击。
DOM-XSS:它和其他两种的区别是,DOM-XSS的XSS代码不需要服务器解析响应的直接参与,触发XSS靠的就是浏览器端的DOM解析,可以认为完全是客户端的事情。
在我们node项目中,选择用xss来做基础的过滤,使用方式如下:
安装: npm install xss
使用方式: var xss = require('xss'); var html = xss('<script>alert(1)</script>'); console.log(html);
但是实际过程中,还是存在很多情况是过滤不到的,比如在这种情况下:
当参数经过编码后:2%27%2Balert%2817064%29%2B%27 ('2'+alert(17064)+'') 就可以躲过xss的过滤。
那么遇到这种情况应该怎么处理呢?
由于我遇到的情况是出现在纯数字参数上,所以我的处理方式是:先encode 然后过滤非纯数字的值。
encodeURLComponent(xss('需要过滤的参数'));
/^[0-9]*$/.test('参数') ? '参数' :'默认值'
因为我之前对这方面也没有特别关注,可能想到的这个不是很好的处理方式,如果大家有更好的方式,希望不吝赐教!
网友评论