May 17, 2024

XSS漏洞原理

1. 反射型XSS(Reflected XSS)

描述

反射型XSS通常发生在当应用程序将用户提供的数据立即包含在响应中时。攻击者诱使用户点击一个包含恶意脚本的链接,这个脚本会在用户的浏览器中执行。

攻击步骤

  1. 攻击者构造一个包含恶意脚本的URL。
  2. 诱使用户点击该URL。
  3. 服务器处理请求并在响应中反射该恶意脚本。
  4. 用户的浏览器执行脚本,攻击者可能窃取用户的敏感信息或执行其他恶意操作。

示例

假设一个搜索页面通过URL参数直接显示用户输入的搜索关键词:
http://example.com/search?q=<script>alert('XSS')</script>
用户点击后,浏览器会执行脚本弹出一个警告框。


2. 存储型XSS(Stored XSS)

描述

存储型XSS发生在当恶意脚本被永久存储在目标服务器上(例如在数据库中)时。任何访问包含该数据的页面的用户都会执行恶意脚本。

攻击步骤

  1. 攻击者将恶意脚本注入到应用程序的输入字段中,例如评论区、论坛帖子或用户配置文件。
  2. 服务器将恶意脚本存储在数据库中。
  3. 其他用户访问包含恶意脚本的页面时,浏览器会执行该脚本。

示例

攻击者在评论区发布一条评论:
<script>alert('XSS')</script>
当其他用户查看评论时,脚本在他们的浏览器中执行,浏览器会执行脚本弹出一个警告框。。


3. 基于DOM的XSS(DOM-based XSS)

描述

基于DOM的XSS发生在客户端,恶意脚本通过修改页面的DOM(文档对象模型)结构来执行。这种类型的XSS不需要与服务器进行交互。

攻击步骤

  1. 攻击者构造一个包含恶意脚本的URL。
  2. 诱使用户点击该URL。
  3. 用户的浏览器解析URL并执行恶意脚本,修改DOM结构。

示例

假设有一个JavaScript代码读取URL参数并将其插入到页面中:
javascript
复制代码
document.getElementById("output").innerHTML = location.search;
用户点击链接:
html
复制代码
http://example.com/page?name=<script>alert('XSS')</script>
脚本被插入并执行。


防御措施

输入验证和编码

使用安全库和框架

内容安全策略(CSP)

避免直接操作DOM

HTTPOnly和Secure标志

关于本文

由 Fly 撰写, 采用 CC BY-NC 4.0 许可协议.

#XSS#Web