Skip to content

XSS(跨站脚本攻击)

(1)什么是 XSS?

XSS(Cross-Site Scripting) 是一种常见的 Web 安全漏洞,攻击者通过注入恶意脚本(通常是 JavaScript)到网页中,使其他用户的浏览器执行这些脚本,从而窃取数据、劫持会话或进行其他恶意操作。

(2) XSS 的攻击原理

  • 攻击者向网页注入恶意代码(如评论、URL 参数、表单输入)。
  • 服务器未正确过滤或转义用户输入,导致恶意代码被存储或反射到页面。
  • 其他用户访问该页面时,浏览器执行恶意脚本。

(3) XSS 的三种类型

类型特点示例场景
存储型 XSS恶意脚本被存储到服务器(如数据库),用户访问时触发。论坛评论注入 <script>alert(1)</script>
反射型 XSS恶意脚本通过 URL 参数传递,服务器直接返回给用户浏览器执行。钓鱼链接 example.com?search=<script>alert(1)</script>
DOM 型 XSS前端 JavaScript 动态修改 DOM 时未过滤输入,导致恶意代码执行。document.write(location.hash) 注入代码

(4) XSS 的危害

  • 窃取 Cookie:通过 document.cookie 获取用户会话信息。
  • 钓鱼攻击:伪造登录表单诱导用户输入密码。
  • 键盘记录:监听用户的键盘输入。
  • 篡改页面内容:插入虚假信息或广告。
  • 传播恶意软件:引导用户下载病毒或勒索软件。

(5) 防御 XSS 的方法

  • 输入过滤
    • 对用户输入进行转义(如 <&lt;)。
    • 使用白名单机制(如只允许特定 HTML 标签)。
  • 输出编码
    • 前端渲染时使用 textContent 替代 innerHTML
    • 模板引擎自动转义(如 React 的 JSX、Vue 的 )。
  • HTTP 安全头
    • 设置 Content-Security-Policy (CSP) 限制脚本来源。
    • 使用 HttpOnly 标记 Cookie(防止 JS 读取)。
  • 现代框架防护
    • React/Vue/Angular 默认对动态内容进行转义。

(6)测试 XSS 的简单示例

html
<!-- 反射型 XSS 测试(需服务器未过滤) -->
https://example.com/search?q=<script>alert('XSS')</script>

<!-- 存储型 XSS 测试(提交到数据库) -->
<textarea>
  <img src="x" onerror="alert('XSS')">
</textarea>

(7)相关安全工具

  • 扫描工具:OWASP ZAP、Burp Suite。
  • 浏览器扩展:XSS Hunter、BeEF(用于演示攻击)。

(8)总结

XSS 是 Web 安全的核心威胁之一,开发者需通过输入过滤、输出编码、CSP 策略等多层防护来降低风险。现代前端框架已内置部分防护,但仍需谨慎处理用户输入!

(9)题目复现

题目:[浮生日记]

  • 题目来源:Polarctf-web-[浮生日记]

image-20250404221421556

  • 解题:

查看源码,注释中提示"弹个窗..."

image-20250404221549757

使用javascript编写弹窗脚本<script>alert(1)</script>

image-20250404221718350

点击"写日记",发现script被过滤了

image-20250404222011016

双写绕过<scscriptript>alert(1);</scscriptript>

image-20250404222056784

提交后未执行

image-20250404222118172

查看源码,发现value(严格上讲应该是输入框将javascript脚本包含了,导致不可执行)未闭合,先让其闭合`

屏幕截图2025-04-04222258

image-20250404222957163

提交得到flag

image-20250404223025665

image-20250404223039604

题目:[来个弹窗]

  • 题目来源:polarctf-web-[来个弹窗]

image-20250429082809998

  • 解题:

尝试弹窗

javascript
<script>alert(1);</script>

image-20250429082922707

全部被过滤了,先尝试双写<

javascript
<<script>alert(1);</script>

image-20250429083039237

再尝试双写script

<<sscriptcript>alert(1);</script>

image-20250429083130674

image-20250429083147657

该角色是白金之星,计算其md5值提交即可

滇ICP备2025057983号-1