C10: 处理所有错误和异常
该控制措施的新版本已发布!
您正在查看 OWASP 十大主动控制措施的 2018 年旧版本。您可以在 OWASP 十大主动控制措施 2024 中找到相同控制措施的信息,具体在 C3: 验证所有输入并处理异常!
描述
异常处理是一种编程概念,允许应用程序以各种方式响应不同的错误状态(例如网络中断或数据库连接失败等)。正确处理异常和错误对于使您的代码可靠和安全至关重要。
错误和异常处理发生在应用程序的所有领域,包括关键业务逻辑、安全功能和框架代码。
从入侵检测的角度来看,错误处理也很重要。对应用程序的某些攻击可能会触发错误,这有助于检测正在进行的攻击。
错误处理中的错误
多伦多大学的研究人员发现,即使是错误处理中的小失误或忘记处理错误,也可能导致 分布式系统中的灾难性故障。
错误处理中的失误可能导致不同类型的安全漏洞。
- 信息泄露:错误消息中泄露敏感信息可能会无意中帮助攻击者。例如,返回堆栈跟踪或其他内部错误详细信息的错误可以向攻击者提供有关您环境的信息。即使处理不同错误条件时的微小差异(例如,在身份验证错误时返回“无效用户”或“无效密码”)也可以为攻击者提供有价值的线索。如上所述,请务必记录错误详细信息以进行取证和调试,但不要泄露此信息,尤其是对外客户端。
- TLS 绕过:Apple goto "fail bug" 是错误处理代码中的一个控制流错误,导致苹果系统上的 TLS 连接完全受到损害。
- DOS(拒绝服务):基本错误处理的缺失可能导致系统关闭。这通常是攻击者很容易利用的漏洞。其他错误处理问题可能导致 CPU 或磁盘使用量增加,从而降低系统性能。
积极建议
- 以 集中方式 管理异常,以避免代码中出现重复的 try/catch 块。确保应用程序内部正确处理所有意外行为。
- 确保向用户显示的错误消息不会泄露关键数据,但仍足够详细以使用户能够做出正确响应。
- 确保异常日志记录足够详细,以便支持、QA(质量保证)、取证或事件响应团队能够理解问题。
- 仔细测试和验证错误处理代码。
参考资料
工具
- Error Prone - 谷歌出品的静态分析工具,用于捕捉 Java 开发人员在错误处理中常见的错误
- 最著名的运行时错误查找自动化工具之一是 Netflix 的 Chaos Monkey,它故意禁用系统实例,以确保整体服务能够正确恢复。