WEB安全阅读记录
Web 安全阅读记录
Web 安全的目标是保护系统的机密性、完整性与可用性。安全建设应从资产和信任边界出发,通过威胁建模识别风险,再用预防、检测、响应和恢复措施形成闭环。
安全评估流程
1 | flowchart TD |
资产分级
资产包括用户数据、身份凭据、密钥、业务接口、源代码、基础设施和可用性。分级时应记录资产负责人、存储位置、访问主体、保留周期和泄露后的影响。
STRIDE 威胁建模
| 类型 | 关注问题 | 常见缓解措施 |
|---|---|---|
| 身份伪造 | 攻击者冒充合法用户 | 强身份认证、会话保护 |
| 数据篡改 | 数据被未授权修改 | 完整性校验、权限控制 |
| 抵赖 | 操作方否认已执行行为 | 审计日志、可信时间 |
| 信息泄露 | 敏感数据被读取 | 加密、脱敏、最小权限 |
| 拒绝服务 | 服务资源被耗尽 | 限流、隔离、弹性扩容 |
| 权限提升 | 低权限主体获得高权限 | 授权校验、权限分层 |

风险评估
可使用以下简化关系表达风险:
1 | 风险 = 发生可能性 × 影响程度 |
评分只能用于排序,不能代替事实分析。DREAD 可从破坏程度、可复现性、可利用性、受影响用户和可发现性等方面辅助评估,但具体组织应统一评分标准,避免不同人员给出不可比较的结果。

基本安全原则
默认拒绝与允许列表
允许列表只接受明确认可的输入、来源或操作,适合安全边界和结构化数据校验。拒绝列表只能拦截已知危险模式,容易被编码变化和未知载荷绕过。输入校验应尽量采用允许列表,输出到 HTML、JavaScript、URL 或 SQL 等不同上下文时,还要执行对应的编码或参数化处理。
最小权限
用户、进程、数据库账户和云服务角色只应拥有完成当前任务所需的权限。日常操作使用普通账户,需要管理权限时通过受审计的临时提升机制执行。
纵深防御
单个措施失效不应直接导致系统失守。例如,身份认证、对象级授权、数据库最小权限、加密和审计日志共同保护用户数据。每一层应针对不同失败模式,而不是重复部署同一种控制。
数据与代码分离
把用户输入当作数据处理,禁止其改变代码结构。SQL 使用参数化查询,HTML 使用上下文编码,操作系统命令尽量使用结构化参数接口。
1 | String sql = "SELECT id FROM users WHERE email = ?"; |
不可预测性与密码学
会话标识、重置令牌和一次性随机数必须使用密码学安全随机源。密码采用适合密码存储的慢哈希算法并配置独立盐值。不得把自制算法或普通伪随机数当作安全措施。
DoS 与 DDoS
DoS 指单一或少量来源消耗目标资源,DDoS 指大量分布式来源协同攻击。两者主要破坏可用性。缓解措施包括边缘清洗、速率限制、连接配额、缓存、队列削峰、资源隔离和降级策略。仅封禁 IP 无法应对来源广泛或地址伪造的攻击。
1 | flowchart LR |
浏览器安全
同源策略
源由协议、主机和端口共同确定。同源策略限制不同源文档之间读取 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 | 服务端请求目标可被用户控制 | 目标允许列表、网络隔离 |
| 文件上传 | 类型与存储位置控制不足 | 内容检测、随机文件名、隔离存储 |
安全验证清单
- 所有外部输入是否经过结构与长度校验。
- 身份认证成功后是否仍执行资源级授权。
- Cookie 是否设置
HttpOnly、Secure和适当的SameSite。 - 错误响应是否避免泄露堆栈、密钥和内部路径。
- 日志是否可用于追踪事件,同时避免写入密码与令牌。
- 依赖、浏览器和服务器组件是否建立持续更新机制。
- 备份能否在隔离环境中成功恢复。





