浏览器 Web 安全基础系列:从同源策略到 XSS 与资源防护

这套系列不是漏洞名词清单,而是一条按依赖关系组织的学习路线。先理解浏览器如何区分网站,再理解 Cookie 与 Session 为什么能维持登录,随后进入跨源访问、CSRF、XSS 和浏览器防御机制,最后讨论第三方资源与静态资源保护。

浏览器 Web 安全基础系列

  1. 浏览器怎么判断是不是同一个网站

  2. Cookie 为什么会自动携带

  3. Session 登录状态为什么可能被劫持

  4. HTTPS 为什么仍然不够

  5. CORS 到底在限制什么

  6. CSRF 是怎么冒用登录状态的

  7. CSRF 如何防御

  8. XSS 为什么能在你的网站执行

  9. CSP 与浏览器安全响应头

  10. Clickjacking 点击劫持

  11. 第三方资源为什么危险

  12. 防盗链到底防什么

浏览器 Web 安全知识地图

为什么要按这个顺序学习

很多安全概念单独看都不难,难点在于它们互相依赖。例如,没理解 Cookie 会被浏览器自动携带,就很难真正理解 CSRF;没理解同源策略只限制跨源读取,就容易误以为 CORS 能阻止所有跨站请求;没理解 XSS 代码运行在目标站点的 Origin 下,也很难理解为什么 XSS 能绕过很多 CSRF 防护。

整套内容围绕一次浏览器请求展开:

  1. 浏览器先判断当前页面和目标地址是否同源、是否同站。

  2. 根据 Cookie 的 Domain、Path、Secure、SameSite 等规则决定是否携带 Cookie。

  3. 如果 JavaScript 跨源读取响应,浏览器执行 CORS 检查。

  4. 服务端验证登录状态、权限、请求来源与 CSRF Token。

  5. 页面渲染不可信数据时,需要防止 XSS。

  6. 页面还需要限制可执行脚本、iframe 嵌入和第三方资源完整性。

适合哪些读者

默认读者知道 HTML、JavaScript、GET、POST 和接口调用,但没有系统学习过 Web 安全。每篇先从问题场景开始,再讲请求过程、关键代码、可运行实验和常见误区。正文只保留核心代码,完整示例在压缩包的 examples/ 目录中。

实验环境

所有实验统一使用 Node.js 18 以上版本。部分实验使用原生 httphttps 模块,部分使用 Express。根目录安装一次依赖后,可以通过独立 npm 命令启动每个实验。

cd examples
npm install
npm run demo:csrf

实验只监听本机地址,故意保留的危险接口也只用于理解浏览器行为,不应复制到生产项目。

建议的阅读方式

先按顺序完成 01~08,建立浏览器安全模型;09~11 是浏览器防御增强;12 则把 Referer、鉴权与 CDN 场景串起来。遇到概念混淆时,回到第 01、02、05、07 篇对照“同源、同站、Cookie、CORS、请求来源”五个关键词。

系列边界

本系列暂不展开 SQL 注入、命令注入、SSRF、路径穿越、文件上传和越权等服务端漏洞。它们需要另一条从输入验证、数据库访问、操作系统调用和权限模型出发的学习路线。

参考资料