什么是 XSS?

编程知识
发表时间:2025-12-03 09:11

什么是 XSS?

如果你刚开始学前端,一定听过“XSS 攻击”。
但网上的解释通常太理论、太绕。

今天我用 最简单的语言 ,5 分钟让你完全搞懂。


一、XSS 到底是什么?一句话版本

XSS = 攻击者把恶意脚本塞进网页,让浏览器误以为是正常代码,进而执行。

你点开了一个网页 → 页面里藏着攻击者写的 JS → 浏览器照样执行 → 数据被偷、账号被盗。

重点:浏览器分不清这段 JS 是你写的,还是坏人写的。


二、为什么叫 “XSS” 而不是 “CSS”?

因为 CSS 已经被占用了(层叠样式表)。
所以“Cross-Site Scripting” 改写成 XSS


三、来一张图,一看就懂

👇 XSS 的基本工作流程

 
攻击者提交恶意脚本 → 网站没过滤 → 浏览器执行脚本 → 信息泄露

你可以想象成:

攻击者在你喝的水里加了药 → 你以为是普通水 → 结果喝下去就中招了。


四、再一张图:实际的前端示例

假设你的网站会把用户输入的内容直接显示出来:

 
<p>你输入的内容是:<span id="output"></span></p> <script> const params = new URLSearchParams(location.search) document.getElementById("output").innerHTML = params.get("msg") </script>

攻击者发送一个链接给你:

 
https://example.com?msg=<script>alert("你被XSS了")</script>

点击之后:
你的页面 真的会执行 alert。

👇 图示流程

 
用户打开链接 ↓ 浏览器执行 <script>alert()... ↓ 攻击者可以进一步做:盗 cookie、跳转、伪造登录...

五、XSS 可以造成哪些危害?

一句话:
你的浏览器给了攻击者“管理员权限”。


六、怎么防?给你最实用的“前端防 XSS 三板斧”

1)输出内容时永远不要用 innerHTML(新手最容易踩)

textContent,不用 innerHTML

 
output.textContent = userInput

2)对输入进行转义(Escape)

把危险字符转义,例如:

 
< → &lt; > → &gt; " → &quot;

这样脚本就不会执行了。


3)永远不要相信用户输入(这是铁律)

用户输入 = 可能含恶意内容
任何地方用到它都要处理。


七、总结(非常关键)

XSS = 用户输入的恶意脚本最终在浏览器被执行。
它并不是一个新概念,但至今依旧是最常见的前端安全问题。

如果学前端,一定要知道:

牢记这三点,你就比大多数新人更懂安全。

分享:

常见问题

答:innerHTML = 用户输入

答:不绝对,但能避免 70% 以上普通 XSS。

答:只要有“用户输入”,就必须注意,一旦被攻击,损失不止你自己。

相关文章推荐
阅读 65