定义:
xss(Cross-site scripting),中文名跨站脚本攻击,恶意攻击者往Web页面里插入恶意Script代码,当用户浏览该页面时,嵌入Web里面的Script代码会被执行,从而达到恶意攻击用户的目的。XSS攻击针对的是用户层面的攻击!
分类
反射型攻击
非持久化,一般是利用网页的搜索功能,需要用户去点击链接才会触发,大多数用来获取用户的cookie信息
eg: 攻击者给你发送了一段包含恶意代码的链接,比如: https:www.abc.com/search.html…,你在点击链接的时候,如果该网站没有对url进行过滤,那么这部分在检索词代码大概率会出现展示在了页面上执行,这就对你造成了攻击
防范:
- 因为这种一般是引诱你点击链接攻击的,所以注意不要乱点链接
- 这种一般是通过url拼接恶意代码进行攻击的,所以开发者注意一定要过滤,encodeUrlComponent拼接的参数
注入型攻击
存储型XSS,持久化,代码是存储在服务器中的,如在个人信息或发表文章等地方,插入代码,如果没有过滤或过滤不严,那么这些代码将储存到服务器中,用户访问该页面的时候触发代码执行。这种XSS比较危险,容易造成蠕虫,盗窃cookie
<script>
const adr = '../evil?cakemonster=' + escape(document.cookie);
</script>
防范:
- cookie设置httpOnly,设置完成后浏览器端通过document.cookie就获取不到了
- 对输入的数据做过滤、html转义、富文本过滤、escapeJson
dom型攻击
不经过后端,DOM-XSS漏洞是基于文档对象模型(Document Objeet Model,DOM)的一种漏洞,DOM-XSS是通过url传入参数去控制触发的,其实也属于反射型XSS。
实现的重点是查找网页上的属性和对应的方法的漏洞,比如说
比如说上边这个图,页面会拿到hash值,直接拼接到imageUrl上,然后渲染到页面,那黑客拼接一个hash值为#' onerror="alert()",或者是' onerror="../evil?cakemonster=' + escape(document.cookie)"就会在图片加载失败的时候直接执行onerror方法,被攻击
可能触发DOM型XSS的属性
document.referer
window.name
location
innerHTML
documen.write
防范:
- 将不可信的值输出 URL参数之前,进行 URLEncode操作,而对于从 URL参数中获取值一定要进行格式检测(比如你需要的时URL,就判读是否满足URL格式)。
- 内容安全策略 CSP,限制执行内联脚本,和可以加载资源的域名网站
- 不要使用 Eval来解析并运行不确定的数据或代码