本文目录导读:

- A01:2021 - 失效的访问控制 (Broken Access Control)
- A02:2021 - 加密机制失效 (Cryptographic Failures)
- A03:2021 - 注入 (Injection)
- A04:2021 - 不安全的设计 (Insecure Design)
- A05:2021 - 安全配置错误 (Security Misconfiguration)
- A06:2021 - 易受攻击和过时的组件 (Vulnerable and Outdated Components)
- A07:2021 - 识别和认证失败 (Identification and Authentication Failures)
- A08:2021 - 软件和数据完整性失效 (Software and Data Integrity Failures)
- A09:2021 - 安全日志记录和监控失效 (Security Logging and Monitoring Failures)
- A10:2021 - 服务端请求伪造 (Server-Side Request Forgery, SSRF)
- 总结与建议
OWASP Top 10 是 开放式Web应用程序安全项目 发布的一份权威性文件,它列出了 Web 应用程序最关键的十大安全风险,这份列表每几年更新一次(最近一次重大更新是 2021 年),旨在帮助开发人员、安全团队和组织优先关注最普遍、最危险的安全漏洞。
以下是 2021 年版的 OWASP Top 10(当前最新版本)的详细解读:
A01:2021 - 失效的访问控制 (Broken Access Control)
- 核心问题:用户(或系统)能够执行本不该被允许的操作,普通用户可以看到管理员的页面、修改其他人的数据,或者未经授权删除内容。
- 常见案例:
- 通过修改 URL 中的 ID 来访问其他用户的账户(如
userid=123)。 - 直接访问后台管理接口而未经过权限校验。
- 特权提升:普通用户通过某种方式获得管理员权限。
- 通过修改 URL 中的 ID 来访问其他用户的账户(如
A02:2021 - 加密机制失效 (Cryptographic Failures)
- 核心问题:敏感数据(如密码、信用卡号、个人身份信息) 在传输或存储时未得到充分的加密保护。
- 常见案例:
- 使用 HTTP 而不是 HTTPS(明文传输)。
- 使用过时、弱密码(如 MD5、SHA-1)存储密码。
- 对敏感数据使用硬编码的密钥或默认密钥。
- 数据在数据库中未加密(如信用卡号明文存储)。
A03:2021 - 注入 (Injection)
- 核心问题:攻击者将恶意代码(如 SQL、OS 命令、NoSQL 查询)作为输入发送给解释器,并被成功执行。
- 常见案例:
- SQL 注入:在搜索框或登录框输入
' OR 1=1 --,绕过验证或窃取数据。 - OS 命令注入:通过表单提交系统命令。
- LDAP 注入、XPath 注入 等。
- SQL 注入:在搜索框或登录框输入
A04:2021 - 不安全的设计 (Insecure Design)
- 核心问题:与“代码层面的 bug”不同,这是指 架构或设计层面 的缺陷,在编写代码之前,业务流程或系统设计就存在安全风险。
- 常见案例:
- 没有限制用户的请求频率(导致暴力破解密码成为可能)。
- 没有设计“最小权限”原则。
- 业务流程中存在逻辑缺陷(如:在结账时修改价格参数)。
- 未设计好密码重置流程(如通过简单问题即可重置)。
A05:2021 - 安全配置错误 (Security Misconfiguration)
- 核心问题:系统、框架、服务器或数据库使用了不安全的默认配置,或者运维人员配置不当。
- 常见案例:
- 服务器开启了目录列表(如直接 http://example.com/uploads/ 能看到所有文件)。
- 使用默认账户/密码(如
admin/admin)。 - 未禁用不必要的 HTTP 方法(如 PUT、DELETE)。
- 错误配置的 CORS(跨域资源共享)策略。
- 云存储桶(如 AWS S3)设置为公开可访问。
A06:2021 - 易受攻击和过时的组件 (Vulnerable and Outdated Components)
- 核心问题:使用了已知有安全漏洞的库、框架或软件版本(如 Log4j、Struts2)。
- 常见案例:
- 未定期扫描依赖库(如 Java 的 JAR、Node.js 的 npm 包)。
- 使用了 End-of-Life(生命周期终止)的操作系统或软件。
- 未及时安装安全补丁。
A07:2021 - 识别和认证失败 (Identification and Authentication Failures)
- 核心问题:登录和身份验证机制存在缺陷,导致攻击者可以冒充其他用户。
- 常见案例:
- 允许使用弱密码(如 123456)。
- 没有限制登录尝试次数(无暴力破解防护)。
- 会话 ID 在 URL 中暴露,或被预测。
- 未实现多因素认证。
- 密码找回功能存在漏洞(如可以枚举用户名)。
A08:2021 - 软件和数据完整性失效 (Software and Data Integrity Failures)
- 核心问题:软件更新、关键数据或 CI/CD 流水线未被验证完整性,导致被篡改。
- 常见案例:
- 从不受信任的源下载依赖库(如 Typosquatting 攻击)。
- 不安全的反序列化:攻击者通过篡改序列化对象(如 Java 的 Serializable、PHP 的反序列化)来执行恶意代码。
- 软件更新包没有数字签名验证。
A09:2021 - 安全日志记录和监控失效 (Security Logging and Monitoring Failures)
- 核心问题:系统无法记录关键安全事件,或者记录了但无人监控。
- 常见案例:
- 未记录关键的登录失败、权限提升、异常操作。
- 日志保存在本地、无备份、易被删除。
- 未设置告警机制(如多次失败登录)。
- 缺乏关键审计事件日志(如谁修改了配置文件)。
A10:2021 - 服务端请求伪造 (Server-Side Request Forgery, SSRF)
- 核心问题:服务端 从用户提供的 URL 获取资源时,可以被攻击者操纵去访问内部网络资源(如内网服务器、云服务元数据)。
- 常见案例:
- 用户输入一个 URL,服务器去访问该 URL 并返回内容。
- 攻击者输入
http://169.254.169.254/latest/meta-data/(AWS 云元数据)来获取云服务的密钥。 - 攻击者让服务器去扫描内网中的其他服务器(
http://192.168.1.1)。
总结与建议
- 如果进行开发/研发:关注 A03(注入)、A01(访问控制)、A07(认证失败) 和 A06(过时组件),这是最常见的问题。
- 控制预算:关注 A05(配置错误) 和 A10(SSRF),通常只需调整配置即可明显提升安全性。
- 最易被忽视:关注 A04(不安全设计) 和 A09(监控失效),它们决定了系统的整体安全水平和应急响应能力。
- 行动建议:
- 将 OWASP Top 10 纳入开发标准,在代码审查时对照检查。
- 使用 SCA(软件组成分析)工具 识别 A06 中的过时组件。
- 使用 SAST(静态应用安全测试)/ DAST(动态应用安全测试)工具 自动化扫描 A03 和 A01。
- 遵循安全编码规范,如使用参数化查询防止 SQL 注入,使用成熟的认证框架。
注意:OWASP Top 10 是“最关键的”,但不是“全部”,在具体业务场景中,还需要考虑 API 安全、容器安全、云安全等其他领域。