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 的方法
- 输入过滤:
- 对用户输入进行转义(如
<
→<
)。 - 使用白名单机制(如只允许特定 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-[浮生日记]
- 解题:
查看源码,注释中提示"弹个窗..."
使用javascript编写弹窗脚本<script>alert(1)</script>
点击"写日记",发现script被过滤了
双写绕过<scscriptript>alert(1);</scscriptript>
提交后未执行
查看源码,发现value(严格上讲应该是输入框将javascript脚本包含了,导致不可执行)未闭合,先让其闭合`
提交得到flag
题目:[来个弹窗]
- 题目来源:polarctf-web-[来个弹窗]
- 解题:
尝试弹窗
javascript
<script>alert(1);</script>
全部被过滤了,先尝试双写<
javascript
<<script>alert(1);</script>
再尝试双写script
<<sscriptcript>alert(1);</script>
该角色是白金之星
,计算其md5值提交即可