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}';