Web 安全阅读记录

Web 安全的目标是保护系统的机密性、完整性与可用性。安全建设应从资产和信任边界出发,通过威胁建模识别风险,再用预防、检测、响应和恢复措施形成闭环。

安全评估流程

1
2
3
4
5
6
7
flowchart TD
A[识别资产与数据] --> B[划分信任边界]
B --> C[枚举威胁]
C --> D[评估发生概率与影响]
D --> E[制定缓解措施]
E --> F[验证措施有效性]
F --> G[监控与持续复查]

资产分级

资产包括用户数据、身份凭据、密钥、业务接口、源代码、基础设施和可用性。分级时应记录资产负责人、存储位置、访问主体、保留周期和泄露后的影响。

STRIDE 威胁建模

类型 关注问题 常见缓解措施
身份伪造 攻击者冒充合法用户 强身份认证、会话保护
数据篡改 数据被未授权修改 完整性校验、权限控制
抵赖 操作方否认已执行行为 审计日志、可信时间
信息泄露 敏感数据被读取 加密、脱敏、最小权限
拒绝服务 服务资源被耗尽 限流、隔离、弹性扩容
权限提升 低权限主体获得高权限 授权校验、权限分层

STRIDE 原始示意图

风险评估

可使用以下简化关系表达风险:

1
风险 = 发生可能性 × 影响程度

评分只能用于排序,不能代替事实分析。DREAD 可从破坏程度、可复现性、可利用性、受影响用户和可发现性等方面辅助评估,但具体组织应统一评分标准,避免不同人员给出不可比较的结果。

DREAD 原始示意图

基本安全原则

默认拒绝与允许列表

允许列表只接受明确认可的输入、来源或操作,适合安全边界和结构化数据校验。拒绝列表只能拦截已知危险模式,容易被编码变化和未知载荷绕过。输入校验应尽量采用允许列表,输出到 HTML、JavaScript、URL 或 SQL 等不同上下文时,还要执行对应的编码或参数化处理。

最小权限

用户、进程、数据库账户和云服务角色只应拥有完成当前任务所需的权限。日常操作使用普通账户,需要管理权限时通过受审计的临时提升机制执行。

纵深防御

单个措施失效不应直接导致系统失守。例如,身份认证、对象级授权、数据库最小权限、加密和审计日志共同保护用户数据。每一层应针对不同失败模式,而不是重复部署同一种控制。

数据与代码分离

把用户输入当作数据处理,禁止其改变代码结构。SQL 使用参数化查询,HTML 使用上下文编码,操作系统命令尽量使用结构化参数接口。

1
2
3
String sql = "SELECT id FROM users WHERE email = ?";
PreparedStatement statement = connection.prepareStatement(sql);
statement.setString(1, email);

不可预测性与密码学

会话标识、重置令牌和一次性随机数必须使用密码学安全随机源。密码采用适合密码存储的慢哈希算法并配置独立盐值。不得把自制算法或普通伪随机数当作安全措施。

DoS 与 DDoS

DoS 指单一或少量来源消耗目标资源,DDoS 指大量分布式来源协同攻击。两者主要破坏可用性。缓解措施包括边缘清洗、速率限制、连接配额、缓存、队列削峰、资源隔离和降级策略。仅封禁 IP 无法应对来源广泛或地址伪造的攻击。

1
2
3
4
5
6
7
8
flowchart LR
A[正常用户] --> D[边缘防护]
B[攻击流量] --> D
C[异常请求] --> D
D --> E[速率限制与挑战]
E --> F[负载均衡]
F --> G[应用服务]
G --> H[隔离的依赖服务]

浏览器安全

同源策略

源由协议、主机和端口共同确定。同源策略限制不同源文档之间读取 DOM、存储和响应内容,但不等于禁止所有跨域资源加载。脚本、图片和样式等资源可能被跨域嵌入,浏览器对它们的可读能力另有约束。

跨域访问应通过 CORS 显式授权。服务端不能简单反射任意 Origin,携带凭据时也不能使用通配来源。涉及状态修改的接口还应防范 CSRF。

浏览器沙箱

沙箱把不可信网页代码限制在受控环境内,只允许其通过明确接口访问文件、设备、网络和操作系统能力。站点可使用 CSP 限制脚本来源,并使用 iframe sandbox 缩小嵌入页面的能力。

1
Content-Security-Policy: default-src 'self'; script-src 'self'; object-src 'none'; frame-ancestors 'none'

恶意网址拦截

浏览器或安全服务会结合信誉库、特征检测和实时分析识别钓鱼站点与恶意下载。黑名单具有滞后性,不能替代浏览器更新、下载隔离和终端防护。钓鱼站点主要窃取凭据,挂马站点则尝试利用浏览器或插件漏洞执行恶意代码。

扩展与插件

浏览器扩展可能拥有跨域请求、读取页面、访问标签页或修改内容的权限。安装前应检查权限范围、开发者信誉和更新记录。企业环境应维护扩展允许列表,并及时移除停止维护的旧式插件。

常见漏洞与防护

漏洞 根本原因 主要防护
SQL 注入 数据改变查询结构 参数化查询、最小权限
XSS 不可信数据进入可执行上下文 上下文编码、CSP
CSRF 浏览器自动携带身份凭据 CSRF 令牌、SameSite Cookie
越权访问 服务端缺少对象级授权 每次请求执行授权校验
SSRF 服务端请求目标可被用户控制 目标允许列表、网络隔离
文件上传 类型与存储位置控制不足 内容检测、随机文件名、隔离存储

安全验证清单

  1. 所有外部输入是否经过结构与长度校验。
  2. 身份认证成功后是否仍执行资源级授权。
  3. Cookie 是否设置 HttpOnlySecure 和适当的 SameSite
  4. 错误响应是否避免泄露堆栈、密钥和内部路径。
  5. 日志是否可用于追踪事件,同时避免写入密码与令牌。
  6. 依赖、浏览器和服务器组件是否建立持续更新机制。
  7. 备份能否在隔离环境中成功恢复。