Web 安全

一、Web 安全的第一性原理

1.1 四个不可动摇的事实

  1. **所有外部输入都是不可信的**(用户、网络、第三方系统)
  2. **客户端永远不可信**(浏览器、App、脚本可被完全控制)
  3. **网络永远不可信**(可被监听、篡改、重放)
  4. **依赖永远可能被污染**(第三方库、构建链、运行环境)

Web 安全的本质:在一个完全不可信的环境中,完成可信计算与可信决策。


1.2 核心安全设计原则(稳定知识)

这些原则在任何时代、任何语言、任何架构下都成立。


二、统一安全认知模型

2.1 信任边界模型(Trust Boundary)

Web 系统天然存在多层信任边界:

所有安全问题,本质都是“跨信任边界时缺乏约束”。


2.2 攻击面的统一划分

攻击面说明典型问题
输入面参数、表单、Header、文件注入、越权
执行面模板、解释器、反序列化RCE、XSS
存储面DB、缓存、对象存储数据泄露
输出面HTML、JSON、HeaderXSS、信息泄露
控制面身份、权限、会话权限绕过
依赖面库、镜像、CI/CD供应链攻击

三、浏览器与客户端侧安全(不可信执行环境)

3.1 同源策略:浏览器侧的第一道信任边界

本质

限制不同源之间的读写能力,而非通信能力。

同源策略是浏览器安全模型的根基,而非“一个功能”。


3.2 浏览器沙箱

核心思想


3.3 点击劫持

本质

用户的“真实意图”被 UI 层欺骗

防御策略:


四、输入 → 执行:注入类攻击的统一模型

4.1 注入攻击的第一性原理

当数据被解释为代码时,注入就发生了。

所有注入攻击(SQL / XSS / 命令 / XML / 模板)共享同一结构:

4.2 XSS(跨站脚本)

信任错误

防御本质


4.3 SQL 注入

本质不是 SQL,而是:

字符串拼接 + 可解释执行

防御抽象:


4.4 反序列化漏洞

本质

将不可信数据恢复为“可执行对象”

防御方向:


五、身份、权限与控制面安全

5.1 权限失效的统一成因

权限是系统级能力,不是接口级 if 判断。


5.2 CSRF:被借用的身份

本质

浏览器自动携带身份,但请求并非用户真实意图

防御抽象:


5.3 会话与 Token 设计


六、服务端与基础设施安全

6.1 SSRF:被代理的信任

发生条件

防御核心:


6.2 路径穿越

本质

文件系统信任了用户提供的路径结构


6.3 敏感数据保护

抽象层次:


七、加密、随机性与密码学误用

7.1 密码学失败的通用模式

密码学不是函数调用,而是系统工程。


八、供应链与 DevSecOps

8.1 供应链攻击本质

利用“信任传递”进行横向污染

覆盖环节:


8.2 DevSecOps

安全左移:


九、拒绝服务与资源治理

9.1 应用层 DoS

本质

不对称资源消耗

治理方向:

关联内容(自动生成)