Web 安全之 XSS 攻击原理/分类/防御 详解

什么是 XSS 攻击?

  • 全称 Cross-Site Scripting 跨站脚本攻击,简写为了避免和 CSS 冲突而改成 XSS
  • 原理:通过在浏览器可输入的地方(比如评论栏、搜索栏、地址栏等)注入脚本(JS、HTML 代码块等),获取用户的 cookie、sessionID 等信息,从而对网站数据造成破坏或者窃取。

常见注入方式

这样说可能有些不好理解,没关系,先留个印象,看后续实例就好

注入的代码可执行,从而产生效果

  • 在 HTML 内嵌的文本中,以 script 标签形式注入
  • 在内联的 JS 中,拼接的数据突破了原本的限制(字符串、变量、方法名等)
  • 在标签属性中,恶意加入引号,注入其他属性或标签
  • 在标签的 href、src 等属性中,添加 JS 可执行代码
  • 在 onload、onerror、onclick 等事件中,注入代码

XSS 攻击分类

反射型 XSS
  • 一般是返回一个构造好的 URL 给服务器,形成攻击
  • 举例
比如用户提交表单中含有 text 字段:<script>alert(1)</script>
则 URL 为 www.foolrBird.com?text=<script>alert(1)</script>
然后浏览器就会输出 1
这里假如替换成其他破坏性的可执行代码可想而知
比如 www.foolBird.com/delete 接口是一键删除所有数据
用户访问了恶意链接 www.foolBird.com/delete,而服务器又没有限制用户权限,直接导致数据被删除(是认证的用户访问链接,所以被信任)
存储型 XSS(或持久性 XSS)

一听这名字就知道危害巨大,存储在数据库中,可以持续造成破坏

  1. 攻击者将恶意代码提交到目标网站的数据库中
  2. 用户访问时,服务端将恶意代码取出拼接在 HTML 中返回给浏览器执行
  3. 恶意代码窃取用户数据后发送到攻击者网站(或冒充用户),调用目标网站接口进行操作
  • 该方式危害最大。不需要用户主动触发,任何允许用户存储数据的网站都可能有被攻击的可能
DOM 型 XSS
  • 诱骗用户访问攻击者构造的URL,利用脚本生成一个 DOM 节点插入到当前网站的 HTML 文件中,形成攻击。这和反射型很相似,唯一区别是构造的 URL 不用发送到服务器,可以达到绕过WAF(Web Application Firewall,网站应用级入侵防御系统)从而躲避服务器检测的目的

想深入了解具体应用场景可以参考[DOM-XSS 攻击原理与防御](DOM-XSS攻击原理与防御 - Mysticbinary - 博客园 (cnblogs.com))

XSS 防御

只要能输入并提交数据的地方都可能存在 XSS 危险

常用
  • HttpOnly:在 cookie 中设置该属性后,JS 脚本(比如 document.cookie)将无法读取 cookie,只能服务器端修改。
  • 输入过滤:比如要求邮箱、电话、用户名等按固定格式输入。这个过滤前端后端都应该做,双重保险
  • 转义 HTML:对引号、尖括号、斜杠进行转义。最好是选择合适的转义库,比较完整。例如 xss 库,npm i xss -S 即可安装
防御存储型和反射型
  • 纯前端渲染,代码和数据分离
防御 DOM 型

一般因为前端代码不够严谨,把不可信数据当代码执行

  • 多用 innerText/textContent、setAtrribute 等

    • 将 innerHTML、outerHTML 替换为 innerText/textContent,它会自动将 HTML 标签解析为普通文件
  • Vue、React 不使用v-html/dangerouslySetInnerHTML

如果觉得对你有帮助的话,点个赞呗~

反正发文又不赚钱,交个朋友呗~

如需转载,请注明出处foolBirdd

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值