C3:保护数据库访问
该控制措施的新版本已发布!
您正在查看OWASP十大主动控制的2018年旧版本。您可以在OWASP十大主动控制2024中的C3:验证所有输入并处理异常找到关于同一控制的信息!
描述
本节介绍所有数据存储(包括关系型数据库和NoSQL数据库)的安全访问。需要考虑的一些方面:
- 安全查询
- 安全配置
- 安全认证
- 安全通信
安全查询
当不受信任的用户输入以不安全的方式(通常通过简单的字符串连接)动态添加到SQL查询中时,就会发生SQL注入。SQL注入是最危险的应用程序安全风险之一。SQL注入易于利用,可能导致整个数据库被盗、被清除或被修改。应用程序甚至可以被用来针对托管您数据库的操作系统运行危险命令,从而让攻击者在您的网络中获得立足点。
为了缓解SQL注入,应阻止不受信任的输入被解释为SQL命令的一部分。最好的方法是使用名为“查询参数化”的编程技术。此防御措施应应用于SQL、OQL以及存储过程构建。
在ASP、ColdFusion、C#、Delphi、.NET、Go、Java、Perl、PHP、PL/SQL、PostgreSQL、Python、R、Ruby和Scheme中查询参数化的良好示例列表可在https://bobby-tables.com以及OWASP查询参数化备忘单上找到。
关于查询参数化的注意事项
数据库查询中的某些位置不能与参数化一起使用。这些位置因每个数据库供应商而异。当遇到无法绑定到参数化查询的数据库查询参数时,务必进行非常仔细的精确匹配验证或手动转义。此外,虽然使用参数化查询对性能有很大积极影响,但特定数据库实现中的某些参数化查询会对性能产生负面影响。务必测试查询的性能;特别是带有大量like子句或文本搜索功能的复杂查询。
安全配置
不幸的是,数据库管理系统并不总是以“默认安全”配置发布。必须注意确保数据库管理系统(DBMS)和托管平台提供的安全控制已启用并正确配置。大多数常见的DBMS都有可用的标准、指南和基准。
有关提供安全配置的快速指南可在数据库备忘单中找到。
安全认证
所有对数据库的访问都应经过适当认证。对DBMS的认证应以安全的方式完成。认证应仅通过安全通道进行。凭据必须得到妥善保护并可供使用。
有关提供安全认证过程的快速指南可在数据库备忘单中找到。
安全通信
大多数DBMS支持多种通信方法(服务、API等),包括安全的(已认证、已加密)和不安全的(未认证或未加密)。根据保护无处不在的数据控制,只使用安全通信选项是一种良好实践。
有关提供安全通信方式的快速指南可在数据库备忘单中找到。