网站攻击-XSS篇

664 阅读1分钟

什么是XSS?

跨站脚本攻击(也称为XSS)指利用网站漏洞从用户那里恶意盗取信息。

XSS攻击的几种常见的方式:

  • 反射型  

         eg: http://XXX/welcomr?type=<script>alert(document.cookie)</script>

  • Dom-Based   

        eg: 当用户修改了某个标签里面的属性,比如说 img 的 src。或者是插入内容,改变前端                 的结构,会造成攻击。

<input type="text" id="web" /><button id="add">添加图片</button>
<div class="box"></div>


$('box').html(`<img src="${$('#web').val()}" />`)

// 比如我输入的内容是:XXX" onerror="alert(1) => 
<img src="XXX" onerror="alert(1)" />

  • 持久型攻击  

        eg: 输入的内容入了服务器,比如常见的用户评论功能

避免XSS攻击的方法:

  • 反射型:

对于这种攻击方式,Chrome浏览器发现路径存在异常,会有XSS屏蔽功能,但是比如火狐等其它浏览器里面并没有这样的屏蔽功能。
一般情况下会让cookie在前端不可以获取,但是这并不是解决XSS的方案,只能降低受损的范围。


解决方案:对参数进行过滤,encodeURIComponent('路径参数')

  • Dome_Based:

这种攻击的内容一般把它叫成  “XSS  payload”


解决方案:转义输入的内容
$('box').html(`<img src="${encodeURI($('#web').val())}" />`)

  • 持久型攻击

这种攻击一般叫它 “XSS  存储型”,恶意的脚本存储到了服务器上,所有人访问时都会造成攻击,比反射型和Dome-Based 范围更大


解决方案:
  1. 客户端传递给服务器时,需要校验,先过滤
  2. 服务器在做一次过滤
  3. 直接在输入的时候过滤

总结:

转义 + 过滤