OWASP Top 10参考
OWASP Top 10 — 2021
A01: 访问控制失效
允许用户超出预设权限操作。防御:强制最小权限、默认拒绝、记录访问控制失败。
A02: 加密机制失效
弱加密导致敏感数据泄露。防御:使用 TLS 1.2+、AES-256,密码不用 MD5/SHA1,使用 bcrypt/Argon2。
A03: 注入
SQL、NoSQL、OS、LDAP 注入。防御:参数化查询、输入验证、ORM。
A04: 不安全设计
设计阶段缺少或无效的安全控制。防御:威胁建模、安全设计模式、纵深防御。
A05: 安全配置错误
默认凭据、详细错误信息、开放云存储。防御:加固指南、自动化配置扫描。
A06: 易受攻击和过时的组件
使用含已知 CVE 的库。防御:SCA 工具(Dependabot、Snyk)、定期更新、SBOM。
A07: 身份识别和认证失败
弱密码、凭据填充、缺少 MFA。防御:强密码策略、MFA、暴力破解保护。
A08: 软件和数据完整性故障
不安全的反序列化、未签名更新。防御:验证签名、使用可信仓库、CI/CD 完整性检查。
A09: 安全日志和监控失败
日志不足使攻击者长期潜伏。防御:记录所有安全事件、使用 SIEM、异常告警。
A10: 服务端请求伪造 (SSRF)
应用未验证 URL 就获取远程资源。防御:目标 URL 白名单、屏蔽内网 IP 段、禁用不必要的 URL 协议。
SQL 注入 — 安全 vs 不安全
// 不安全 - 字符串拼接
query := "SELECT * FROM users WHERE email = '" + email + "'"
// 攻击者输入: ' OR '1'='1
// 安全 - 参数化查询 (Go)
row := db.QueryRow("SELECT * FROM users WHERE email = $1", email)
// 安全 - 预编译语句
stmt, _ := db.Prepare("SELECT * FROM users WHERE email = ?")
row := stmt.QueryRow(email)
XSS 防御
// 不安全 - 直接注入 HTML
innerHTML = userInput;
// 安全 - 转义输出
element.textContent = userInput;
// 安全 - 使用 DOMPurify 处理富文本
import DOMPurify from 'dompurify';
element.innerHTML = DOMPurify.sanitize(userInput);
// 内容安全策略头
Content-Security-Policy: default-src 'self'; script-src 'self' 'nonce-{random}';