type
status
date
slug
summary
tags
category
icon
password

什么是跨站脚本攻击(XSS)

跨站脚本(Cross Site Scripting,XSS)指攻击者在页面插入恶意代码,当其他用户访问时,浏览会器解析并执行这些代码,达到窃取用户身份、钓鱼、传播恶意代码等行为。一般我们把 XSS 分为反射型存储型DOM型 3 种类型。

反射型 XSS

反射型 XSS 也叫“非持久型 XSS”,是指攻击者将恶意代码通过请求提交给服务端,服务端返回的内容,也带上了这段 XSS 代码,最后导致浏览器执行了这段恶意代码。
反射型 XSS 攻击方式需要诱导用户点击链接,攻击者会伪装该链接(例如短链接),当用户点击攻击者的链接后,攻击者便可以获取用户的 cookie 身份信息。
案例: 服务端直接输出参数内容:
恶意代码链接:

存储型 XSS

存储型 XSS 也叫“持久型XSS”,会把用户输入的数据存储在服务端,这种XSS具有很强的稳定性。
案例: 比如攻击者在一篇博客下留言,留言包含恶意代码,提交到服务端后被存储到数据库。所有访问该博客的用户,在加载出这条留言时,会在他们的浏览器中执行这段恶意的代码。

DOM 型 XSS

DOM 型 XSS 是一种特殊的反射型 XSS,它也是非持久型 XSS。相比于反射型 XSS,它不需要经过服务端,而是改变页面 DOM 来达到攻击。同样,这种攻击方式也需要诱导用户点击。
案例:
目标页面:
恶意代码链接:

防御手段

  • 参数验证,不符合要求的数据不要存入数据库
  • 对特殊字符转义,如"<"、">"、"/"、"&"等
  • 避免使用eval、new Function动态执行字符串的方法
  • 避免使用 innerHTML、document.write 直接将字符串输出到HTML
  • 把一些敏感的 cookie 设置为 http only,避免前端访问 cookie
栈内存堆内存和预处理WebSocket协议详解
  • Twikoo