- OWASP TOP 10
-
- 2021
-
- TOP1 Broken Access Control
- TOP2 Cryptographic Failures
- TOP3 Injection
- TOP4 Insecure Design
- TOP5 Security Misconfiguration
- TOP6 Vulnerable and Outdated Components
- TOP7 Identification and Authentication Failures
- TOP8 Software and Data Integrity Failures
- TOP9 Security Logging and Monitoring Failures
- TOP10 Server-Side Request Forgery (SSRF)
OWASP TOP 10
开放式Web应用程序安全项目
OWASP Top 10 是面向开发人员和 Web 应用程序安全性的标准意识文档。它代表了对 Web 应用程序最关键的安全风险的广泛共识。
2021
TOP1 Broken Access Control
损坏的访问控制
访问控制强制执行策略,以便用户不能在其预期权限之外进行操作。故障通常会导致未经授权的信息披露、修改或销毁所有数据,或在用户权限之外执行业务功能。常见的访问控制漏洞包括:
-
违反最小特权原则或默认情况下拒绝,仅应授予特定功能、角色或用户访问权限,但任何人都可以访问。
-
通过修改URL(参数篡改或强制浏览)、内部应用程序状态或HTML页面,或使用攻击工具修改API请求,绕过访问控制检查。
-
通过提供其唯一标识符(不安全的直接对象引用),允许查看或编辑其他人的帐户
-
访问API时缺少POST、PUT和DELETE的访问控制。
-
特权的提升。未登录时以用户身份行事,或以用户身份登录时以管理员身份行事。
-
元数据操纵,例如重放或篡改JSON Web令牌(JWT)访问控制令牌,或操纵cookie或隐藏字段以提升权限或滥用JWT失效。
-
CORS错误配置允许从未经授权/不受信任的来源访问API。
-
强制以未经验证的用户身份浏览已验证的页面,或以标准用户身份浏览特权页面。
预防措施
- 除公共资源外,默认情况下拒绝。
- 实现一次访问控制机制,并在整个应用程序中重复使用它们,包括最小化跨源资源共享(CORS)使用。
- 模型访问控制应该强制记录所有权,而不是接受用户可以创建、读取、更新或删除任何记录。
- 独特的应用程序业务限制要求应由域模型强制执行。
- 禁用web服务器目录列表,并确保web根目录中不存在文件元数据(例如.git)和备份文件。
- 记录访问控制故障,适当时向管理员发出警报(例如,重复故障)。
- 速率限制API和控制器访问,以将自动化攻击工具的危害降至最低。
- 注销后,服务器上的有状态会话标识符应无效。无状态JWT令牌应该是短命的,以便使攻击者的机会窗口最小化。对于寿命较长的JWT,强烈建议遵循OAuth标准来撤销访问。
TOP2 Cryptographic Failures
加密失败
以前称为敏感数据暴露,这更像是一个广泛的症状而不是根本原因,重点是与加密相关的故障(或缺乏加密)。这通常会导致敏感数据的泄露。
第一件事是确定传输中和静止数据的保护需求。例如,密码、信用卡号、健康记录、个人信息和商业秘密需要额外保护,主要是如果这些数据属于隐私法,如欧盟的《一般数据保护条例》(GDPR)或条例,如PCI数据安全标准(PCI DSS)等金融数据保护。对于所有这些数据:
- 是否以明文形式传输任何数据?这涉及到HTTP、SMTP、FTP等协议,这些协议也使用像STARTTLS这样的TLS升级。外部互联网流量是危险的。验证所有内部流量,例如 负载平衡器、web服务器或后端系统之间的流量。
- 默认情况下或旧代码中是否使用了任何旧的或弱的加密算法或协议?
- 是否使用默认加密密钥,是否生成或重复使用弱加密密钥,或者是否缺少适当的密钥管理或轮换?加密密钥是否已签入源代码存储库?
- 是否未强制加密,例如,是否缺少任何HTTP头(浏览器)安全指令或头?
- 收到的服务器证书和信任链是否正确验证?
- 初始化向量是否被忽略、重用,或者生成的初始化向量对于加密操作模式是否足够安全?是否正在使用ECB等不安全的操作模式?当认证加密更合适时是否使用加密?
- 在没有密码基密钥派生功能的情况下,密码是否用作加密密钥?
- 随机性是否用于不满足加密要求的加密目的?即使选择了正确的函数,开发人员是否需要对其进行种子设定,如果不需要,开发人员是否用缺乏足够熵/不可预测性的
种子过度编写了内置的强大种子设定功能? - 不推荐使用的散列函数(如MD5或SHA1)是否正在使用,或者在需要加密散列函数时是否使用非加密散列函数?