Skip to content

Instantly share code, notes, and snippets.

@hjzheng
Last active August 14, 2020 14:47
Show Gist options
  • Save hjzheng/b30ff96140554a41fd3a986acebcd69b to your computer and use it in GitHub Desktop.
Save hjzheng/b30ff96140554a41fd3a986acebcd69b to your computer and use it in GitHub Desktop.
XSS

目录

  1. 什么是XSS
  2. XSS原理
  3. XSS危害
  4. XSS攻击 (攻击分类与举例)
  5. XSS防御
  6. XSS检测

什么是 XSS

引用自 wiki

跨站脚本(英语:Cross-site scripting,通常简称为:XSS)是一种网站应用程序的安全漏洞攻击,是代码注入的一种。它允许恶意用户将代码注入到网页上,其他用户在观看网页时就会受到影响。这类攻击通常包含了HTML以及用户端脚本语言。

XSS原理

攻击者,利用网站开发的漏洞,将恶意代码,与网站正常的代码混在一起;浏览器无法分辨哪些脚本是可信的,导致恶意脚本被执行,从而达到攻击者的目的。

恶意代码的可能来源:

  1. 用户 UGC 内容 (UGC 互联网术语,全称为User Generated Content,也就是用户生成内容)
  2. 来自第三方的链接
  3. URL 参数
  4. POST 参数
  5. Referer(可能来自不可信的来源)
  6. Cookie(可能来自其他子域注入)

防御的关键就是对任何非可信来源的数据(可能包含有恶意代码)进行处理

XSS危害

  1. 盗取用户cookies信息
  2. 劫持用户浏览器
  3. 强制弹出广告页面、刷流量
  4. 网页挂马
  5. 进行恶意操作,例如任意篡改页面信息
  6. 获取客户端隐私信息等

XSS攻击

分类

XSS 攻击可以分为3类:存储型(持久型)、反射型(非持久型)、DOM 型。

  1. 存储型 XSS 注入型脚本永久存储在目标服务器上。当浏览器请求数据时,脚本从服务器上传回并执行。

  2. 反射型 XSS 当用户点击一个恶意链接,或者提交一个表单,或者进入一个恶意网站时,注入脚本进入被攻击者的网站。Web服务器将注入脚本,比如一个错误信息,搜索结果等 返回到用户的浏览器上。由于浏览器认为这个响应来自"可信任"的服务器,所以会执行这段脚本。

  3. 基于 DOM 的 XSS 通过修改原始的客户端代码,受害者浏览器的 DOM 环境改变,导致有效载荷的执行。也就是说,页面本身并没有变化,但由于DOM环境被恶意修改,有客户端代码被包含进了页面,并且意外执行。

DOM 型 XSS 攻击,实际上就是网站前端 JavaScript 代码本身不够严谨,把不可信的数据当作代码执行了。

举例

XSS防御

  1. 将重要的 cookie 标记为 http only
  2. 对任何非信任来源数据进行编码处理(前后端使用统一的编码库)
  3. CSP: Content-Security-Policy (内容安全策略)

注意:如果用 Vue/React 技术栈,并且不使用 v-html/dangerouslySetInnerHTML 功能,就在前端 render 阶段避免 innerHTML、outerHTML 的 XSS 隐患。

一定要确保 dangerouslySetInnerHTML 里面的内容来自可信任的来源。(例如来自后端信息)

XSS检测

  1. 使用通用 XSS 攻击字符串手动检测 XSS 漏洞。
  2. 使用扫描工具自动检测 XSS 漏洞。

参考资料:

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment