Web 安全
一、Web 安全的第一性原理
1.1 四个不可动摇的事实
- **所有外部输入都是不可信的**(用户、网络、第三方系统)
- **客户端永远不可信**(浏览器、App、脚本可被完全控制)
- **网络永远不可信**(可被监听、篡改、重放)
- **依赖永远可能被污染**(第三方库、构建链、运行环境)
Web 安全的本质:在一个完全不可信的环境中,完成可信计算与可信决策。
1.2 核心安全设计原则(稳定知识)
- **默认拒绝(Default Deny)**:未显式允许的一律禁止
- **最小权限(Least Privilege)**:只给完成任务所需的最小能力
- **纵深防御(Defense in Depth)**:单点失效不可导致系统失守
- **数据与代码分离**:数据永远不能被解释为指令
- **不可预测性**:令牌、随机数必须不可推断
- **信任边界清晰化**:跨边界必校验
这些原则在任何时代、任何语言、任何架构下都成立。
二、统一安全认知模型
2.1 信任边界模型(Trust Boundary)
Web 系统天然存在多层信任边界:
- 浏览器边界(用户控制)
- 网络边界(公网 / 内网)
- 服务边界(服务与服务)
- 数据边界(数据库、缓存、文件)
- 运维与供应链边界
所有安全问题,本质都是“跨信任边界时缺乏约束”。
2.2 攻击面的统一划分
| 攻击面 | 说明 | 典型问题 |
|---|---|---|
| 输入面 | 参数、表单、Header、文件 | 注入、越权 |
| 执行面 | 模板、解释器、反序列化 | RCE、XSS |
| 存储面 | DB、缓存、对象存储 | 数据泄露 |
| 输出面 | HTML、JSON、Header | XSS、信息泄露 |
| 控制面 | 身份、权限、会话 | 权限绕过 |
| 依赖面 | 库、镜像、CI/CD | 供应链攻击 |
三、浏览器与客户端侧安全(不可信执行环境)
3.1 同源策略:浏览器侧的第一道信任边界
本质:
限制不同源之间的读写能力,而非通信能力。
- 同协议 + 同域名 + 同端口 = 同源
- 绕过同源 → 直接导致 XSS、CSRF、数据窃取
同源策略是浏览器安全模型的根基,而非“一个功能”。
3.2 浏览器沙箱
核心思想:
- 不可信代码必须运行在受限环境
- 跨沙箱访问只能通过受控 API
- 默认拒绝,显式授权
3.3 点击劫持
本质:
用户的“真实意图”被 UI 层欺骗
防御策略:
- 明确 UI 所属边界(X-Frame-Options / CSP frame-ancestors)
四、输入 → 执行:注入类攻击的统一模型
4.1 注入攻击的第一性原理
当数据被解释为代码时,注入就发生了。
所有注入攻击(SQL / XSS / 命令 / XML / 模板)共享同一结构:
- 可控输入
- 可解释执行
- 缺乏结构化约束
4.2 XSS(跨站脚本)
信任错误:
- 信任了来自用户的数据
- 信任了浏览器的解析行为
防御本质:
- 输出编码(Context-Aware Encoding)
- CSP 约束执行能力
- Cookie 与 JS 隔离(HttpOnly)
4.3 SQL 注入
本质不是 SQL,而是:
字符串拼接 + 可解释执行
防御抽象:
- 结构化查询(预编译)
- 数据类型约束
4.4 反序列化漏洞
本质:
将不可信数据恢复为“可执行对象”
防御方向:
- 限制可反序列化类型
- 执行期行为检测(RASP)
五、身份、权限与控制面安全
5.1 权限失效的统一成因
- 默认允许而非默认拒绝
- 权限判断分散在业务逻辑中
- 信任了前端状态或参数
权限是系统级能力,不是接口级 if 判断。
5.2 CSRF:被借用的身份
本质:
浏览器自动携带身份,但请求并非用户真实意图
防御抽象:
- 身份 ≠ 意图
- 必须引入不可伪造的用户参与证明(Token / Challenge)
5.3 会话与 Token 设计
- 生命周期最小化
- 明确撤销能力
- 区分认证(Authentication)与授权(Authorization)
六、服务端与基础设施安全
6.1 SSRF:被代理的信任
发生条件:
- 服务端拥有更高网络权限
- 用户可控请求目标
防御核心:
- 明确“服务端可以访问什么”
- 白名单而非黑名单
6.2 路径穿越
本质:
文件系统信任了用户提供的路径结构
6.3 敏感数据保护
抽象层次:
- 数据分类分级
- 生命周期最小化
- 存储 / 传输 / 使用全链路保护
七、加密、随机性与密码学误用
7.1 密码学失败的通用模式
- 算法正确,使用方式错误
- 随机性不足
- 密钥管理失控
密码学不是函数调用,而是系统工程。
八、供应链与 DevSecOps
8.1 供应链攻击本质
利用“信任传递”进行横向污染
覆盖环节:
- 开发
- 构建
- 依赖
- 发布
8.2 DevSecOps
安全左移:
- 静态分析
- 依赖审计
- 模糊测试
- 自动化策略执行
九、拒绝服务与资源治理
9.1 应用层 DoS
本质:
不对称资源消耗
治理方向:
- 资源隔离
- 成本放大最小化
- 异常模式识别
关联内容(自动生成)
- [/计算机网络/网络安全/安全架构.html](/计算机网络/网络安全/安全架构.html) 详细阐述了网络安全架构的设计原则和模型,与Web安全中的信任边界模型、安全设计原则有直接关联
- [/计算机网络/网络安全/认证与授权.html](/计算机网络/网络安全/认证与授权.html) 深入探讨了身份认证与授权机制,是Web安全中身份、权限与控制面安全的具体实现方案
- [/计算机网络/网络安全/业务安全.html](/计算机网络/网络安全/业务安全.html) 从业务角度分析安全问题,与Web安全中的权限失效、业务逻辑漏洞等有密切联系
- [/计算机网络/网络安全/网络安全技术.html](/计算机网络/网络安全/网络安全技术.html) 涵盖了XSS、CSRF、SQL注入等具体安全漏洞和防护技术,是对Web安全中注入类攻击、客户端安全的详细补充
- [/计算机网络/网络安全/渗透测试.html](/计算机网络/网络安全/渗透测试.html) 介绍安全测试方法和工具,有助于验证Web安全防护措施的有效性
- [/软件工程/架构/Web前端/Web前端.html](/软件工程/架构/Web前端/Web前端.html) 涵盖前端开发技术,与Web安全中的浏览器侧安全、同源策略、CSP等概念密切相关
- [/软件工程/架构/Web前端/前后端分离.html](/软件工程/架构/Web前端/前后端分离.html) 探讨前后端分离架构,涉及跨域安全、认证授权等与Web安全直接相关的问题
- [/操作系统/安全.html](/操作系统/安全.html) 介绍操作系统层面的安全机制,为Web应用提供底层安全保障,与Web安全中的纵深防御理念相呼应
- [/编程语言/JAVA/JakartaEE/Cookie&Session.html](/编程语言/JAVA/JakartaEE/Cookie&Session.html) 详细说明Cookie与Session的实现和管理,是Web安全中会话安全的重要实践
- [/编程语言/JAVA/高级/JDBC.html](/编程语言/JAVA/高级/JDBC.html) 介绍数据库连接和SQL执行,与Web安全中的SQL注入防护密切相关
- [/计算机网络/网络安全/网络安全隔离技术.html](/计算机网络/网络安全/网络安全隔离技术.html) 探讨网络隔离技术,与Web安全中的信任边界模型共同构建纵深防御体系
- [/计算机网络/应用层.html](/计算机网络/应用层.html) 介绍应用层协议和安全,与Web安全中的HTTP相关安全威胁和防护措施直接相关
- [/计算机网络/网络安全/密码学/密码学.html](/计算机网络/网络安全/密码学/密码学.html) 提供密码学基础,为Web安全中的身份认证、数据传输加密、数字签名等提供理论支持