XSS(Cross-Site Scripting)是黑客通过在网页中注入恶意 JavaScript 代码,让受害者的浏览器执行这些代码的攻击方式。
XSS 攻击通常发生在网站允许用户提交内容的地方,例如:
论坛、留言板(黑客发布恶意评论)
博客文章(黑客在评论区插入恶意代码)
搜索框(黑客让受害者访问特定链接)
假设一个网站 vulnerable.com
允许用户提交留言:
如果网站直接显示用户输入的内容:
用户留言:
问题: 由于网站未对用户输入进行过滤,黑客可以插入恶意 JavaScript 代码!
黑客在留言框中输入:
服务器会存储这段代码,并在页面加载时执行,导致所有访问该页面的用户都弹出提示框。这就是 XSS 攻击!
攻击方式 | 恶意代码示例 | 后果 |
---|---|---|
窃取用户 Cookie |
|
盗取用户登录凭证 |
记录用户输入 |
|
记录用户账号密码 |
伪造钓鱼页面 |
|
诱骗用户输入密码 |
让用户自动执行操作 |
|
受害者自动转账 |
✅ 1. 过滤和转义用户输入 不直接输出 HTML,而是转义特殊字符,例如:
from flask import escape
safe_message = escape(user_input)
这样, 会被转换成
<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 是 Cookie 的一个安全属性,当服务器发送 Cookie 时,可以加上 HttpOnly:
Set-Cookie: sessionid=abc123; HttpOnly; Secure
作用:防止 JavaScript 代码(包括 XSS 攻击)窃取 Cookie!
黑客可窃取 sessionid
并冒充用户登录。
即使 XSS 存在,JavaScript 也无法读取 Cookie。
虽然 HttpOnly 能阻止 JavaScript 访问 Cookie,但它无法防止 CSRF(跨站请求伪造)。 因此,需要配合 CSRF Token 机制来防御!
✅ XSS 允许黑客注入 JavaScript 代码,诱骗受害者执行。 ✅ XSS 可窃取 Cookie、记录按键、伪造页面、远程控制用户。 ✅ 防御措施包括:过滤输入、使用 CSP、设置 HttpOnly Cookie。
你学会了吗?如果还有疑问,欢迎讨论!