终于搞懂 XSS 为什么能盗号了:Cookie、Session、HttpOnly 一次讲明白
刚开始学习 XSS 的时候,我一直有个疑问:
为什么很多人都说:“XSS 能盗号”?
不就是弹个:<script>alert(1)</script>吗?
后来继续学习Cookie和Session之后,我才慢慢明白:
XSS 真正危险的地方,不是弹窗。
而是:它能获取用户的“登录状态”。
这篇文章,我想尽量用自己的语言以及理解方式,把:
- Cookie
- Session
- HttpOnly
- XSS 为什么能盗号
一次讲清楚。
一、网站为什么知道“你是谁”?
比如:你登录了某个网站。
关闭页面后再打开:网站居然还认识你。
为什么?
总不能服务器把全国用户都记脑子里吧
其实这里就涉及:
Cookie 和 Session
二、Cookie 到底是什么?
简单理解:Cookie 是浏览器保存的一小段数据。
网站可以让浏览器保存:
Set-Cookie: sessionid=abc123
浏览器收到后:就会自动保存。
之后每次访问这个网站时:
浏览器都会自动携带:Cookie: sessionid=abc123
于是服务器就知道:“哦,这还是刚才那个用户。”
三、Session 又是什么?
很多新手第一次学的时候都会懵。
其实:Session 才是真正的“登录状态”
服务器会保存:sessionid=abc123
对应用户:张三
而浏览器只负责保存:abc123
这就是:SessionID
所以整个登录流程其实是:
四、现在回来看 XSS
4.1 Session 劫持
假设网站存在 XSS。
攻击者成功执行了 JS:document.cookie
浏览器就会返回:sessionid=abc123
这时候问题就来了。
因为:这个 SessionID本质上就是用户登录身份。
如果攻击者拿到了它。
那么:服务器可能会认为攻击者就是这个用户。
这就是:Session 劫持
4.2 那xss如何盗cookie呢
五、所以 XSS 为什么危险?
以前我一直以为:XSS 就是弹窗。
后来才发现,弹窗只是:“漏洞存在”的测试方式
真正危险的是:(面试会考)
- 获取登录态
- 伪造用户操作
- 获取敏感信息
- 页面钓鱼
- JS 键盘记录
本质上:
XSS = 攻击者能在你的浏览器里执行 JS
这才是最可怕的地方。
六、那为什么现在很多网站偷不到 Cookie 了?
因为现代网站通常会加:HttpOnly
例如:
Set-Cookie: sessionid=abc123; HttpOnly
这个属性的作用就是:不允许 JavaScript 读取 Cookie。
于是:document.cookie 就拿不到 SessionID 了。
这也是为什么:
HttpOnly 是防御 XSS 的重要手段之一。
七、HttpOnly 是不是就无敌了?
其实也不是。
因为:XSS 的本质是“执行 JS”即使偷不到 Cookie。
攻击者仍然可能:
- 伪造请求
- 修改页面
- 钓鱼
- 获取用户输入
- 操作当前账号
所以:
HttpOnly 只是降低风险。
并不是彻底解决 XSS。
八、我现在对 XSS 最大的理解变化
以前我学习漏洞:
总喜欢:
- 背 payload
- 找 alert
- 看别人打靶场
后来才发现,真正重要的是:Web 是怎么工作的
比如:
- 浏览器为什么自动带 Cookie
- Session 为什么能维持登录
- JS 为什么能读取 Cookie
- HttpOnly 为什么能防御
这些东西一旦串起来,很多漏洞就理解了。
给大家看一下真实环境截图:
九、新手学习 XSS 最容易踩的坑
我目前感觉最大的坑就是:只学 payload,不理解原理,这样后面会越来越乱。
因为:
- DOM 不懂
- Cookie 不懂
- Session 不懂
- 浏览器机制不懂
最后:看起来学了很多漏洞,实际上都是碎片知识。
十、总结
最近学习 Web 安全最大的感受就是:很多漏洞之间其实是连着的。
比如:
当这些东西真正串起来的时候。
才会第一次有:“我开始理解 Web 安全了”的感觉。
后面准备继续学习:
- CSP
- CSRF
- JWT
- SQL 注入
- 文件上传
也会继续整理学习笔记分享出来。
