如何使用JavaScript过滤XSS攻击?
什么是XSS攻击
XSS(Cross Site Scripting),跨站脚本攻击,是一种允许攻击者在另外一个用户的浏览器中执行恶意代码脚本的脚本注入式攻击。本来缩小应该是CSS,但为了和层叠样式(CasCADing Style Sheet,CSS)有所区分,故称XSS。
对于攻击者来说,能够让受害者浏览器执行恶意代码的唯一方式,就是把代码注入到受害者从网站下载的网页中。
xss攻击的种类
一、持续型XSS攻击:恶意脚本来源于网站的数据库
我们来看这种攻击的一个场景
1、攻击者通过评论表单提交将<script>alert(‘aaa’)</script>提交到网站
2、网站后端对提交的评论数据不做任何操作,直接存储到数据库中
3、其他用户访问正常访问网站,并且需要请求网站的评论数据
4、网站后端会从数据库中取出数据,直接返回给用户
5、用户得到页面后,直接运行攻击者提交的代码<script>alert(‘aaa’)</script>,所有用户都会在网页中弹出aaa的弹窗
这种攻击方式恶意代码会被存储在数据库中,其他用户在正常访问的情况下,也有会被攻击,影响的范围比较大
二、反射型XSS攻击:恶意脚本来源于受害者的请求
在一个反射型XSS攻击中,恶意文本属于受害者发送给网站的请求中的一部分。随后网站又把恶意文本包含进用于响应用户的返回页面中,发还给用户。
我们来看下面这个场景
1、用户误点开了带攻击的url :http://xxx?keyword=<script>alert(‘aaa’)</script>
2、网站给受害者的返回中包含了来自URL的的恶意文本
3、用户的浏览器收到文本后执行页面,会在网页中弹窗aaa
反射型的攻击需要用户主动的去访问带攻击的链接,攻击者可以通过邮件或者短信的形式,诱导受害者点开链接。如果攻击者配合短链接URL,攻击成功的概率会更高
三、基于DOM的XSS攻击
基于DOM的XSS攻击是反射型攻击的变种。服务器返回的页面是正常的,只是我们在页面执行js的过程中,会把攻击代码植入到页面中
JavaScript过滤XSS攻击方法
var filterXSS = function(oriStr) {
if (!oriStr) {
return oriStr;
}
var charCodes = ['3c', '3e', '27', '22', '28', '29', '60', {
format: 'script{}',
chr: '3a'
}]; //要转义字符的16进制ASCII码[1< 2> 3' 4" 5( 6) 7`]
var xssChars = [],
filterChars = [],
tmpFormat = '{}',
tmpChr;
for (var i = 0; i < charCodes.length; i++) {
if ('string' == typeof charCodes[i]) {
tmpFormat = '{}';
tmpChr = charCodes[i];
} else {
tmpFormat = charCodes[i].format;
tmpChr = charCodes[i].chr
}
xssChars.push(tmpFormat.replace('{}', 'u00' + tmpChr));
xssChars.push(tmpFormat.replace('{}', '%' + tmpChr)); //1次encode
xssChars.push(tmpFormat.replace('{}', '%25' + tmpChr)); //2次encode
filterChars.push(tmpFormat.replace('{}', '&#x' + tmpChr + ';'));
filterChars.push(tmpFormat.replace('{}', '%26%23x' + tmpChr + '%3B')); //1次encode
filterChars.push(tmpFormat.replace('{}', '%2526%2523x' + tmpChr + '%253B')); //2次encode
}
for (var i = 0; i < xssChars.length; i++) {
oriStr = oriStr.replace(new RegExp(xssChars[i], 'gi'), filterChars[i]);
}
//预防script:
oriStr = oriStr.replace(/script[u000du000au0020]+:/, 'script:');
return oriStr;
1.如果服务器暂不能下载请稍后重试!总是不能下载,请联系客服,谢谢合作!
2.本站所有资源(包括写真、模板、素材、软件、字体等)仅供学习与参考,请勿用于商业用途。
3.本站所有素材来源于用户上传和网络,如有侵权请请联系客服处理!
4.本站资源售价只是赞助,收取费用仅维持本站的日常运营所需。
博创云素材 » 如何使用JavaScript过滤XSS攻击?
常见问题FAQ
- 免费下载或者VIP会员专享资源能否直接商用?
- 本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
- 提示下载完但解压或打开不了?
- 最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。 若排除这种情况,可在对应资源底部留言,或 联络我们。