Web 攻击模型
为什么所有客户端输入都不可信?
- 客户端可以自由变更和篡改 HTTP 请求;
- 服务端必须把一切来自客户端的请求视为不可信请求;
- 推论: 安全校验的边界只能在服务端;
主动攻击与被动攻击有什么区别?
| 类型 | 攻击者行为 | 典型手段 |
|---|---|---|
| 主动攻击 | 主动访问 Web 应用并传入攻击代码 | SQL 注入、OS 命令注入 |
| 被动攻击 | 预设陷阱代码诱导用户触发, 以用户为跳板攻击 | XSS、CSRF |
通用的防御策略有哪些?
- 客户端验证: 只能作为 UI 提示, 不可作为安全依据;
- 服务端验证:
- 输入值验证: 校验请求参数是否合规;
- 输入值转义: 转义请求参数, 使攻击代码失效;
- 浏览器与服务端的安全策略: 同源策略、CSP 与安全响应首部等;