安全代码审查是一种代码评估,用于在开发生命周期的早期阶段识别安全漏洞。与渗透测试(自动和手动)结合使用时,它可以显着改善组织的安全状况。本文不讨论执行安全代码审查的过程,而是讨论审查代码的机制。
如何开始评估?
定义通用检查表可以为安全检查人员提供所需的上下文,并且是开发人员已纳入的安全检查级别的良好晴雨表。清单应涵盖最关键的安全控制和漏洞领域,例如:
- 资料验证
- 验证
- 授权
- 会话管理
- 错误处理
- 密码学
- 记录中
- 安全配置错误
不可能涵盖所有领域,但是在这里我们将讨论在代码审查过程中发现的一些缺陷及其缓解技术,以期就如何进行代码审查评估提供一个视角。
进行代码评估时应考虑哪些因素?
- 审核输入验证机制:
始终在完全了解您的应用程序要完成的操作的情况下验证用户数据。验证类型:- 数据验证:如果可能,应实施精确匹配验证,以允许数据符合期望值。白名单(一种较弱但更灵活的方法)很常见,它允许在白名单中定义字符/正则表达式。其他选择是仅将“坏字符”列入黑名单。由于设计了更多机制来通过新的攻击有效负载绕过此列表,因此该方法将需要定期维护。
- 业务验证:在检查代码之前,需要了解业务逻辑。它可以用于限制值范围或用户输入的交易,并拒绝没有商业意义的输入。
为了进行验证,分析师必须确保以下各项:
- 存在数据验证机制。
- 存在对所有输入的正确长度检查。
- 所有字段,cookie,http标头/正文和表单字段均经过验证。
- 验证发生在服务器端。
- 查看评论的代码:
审阅者应确保在将应用程序推广到生产环境之前,删除所有包含敏感信息的注释代码。 - 查看错误处理机制:
审查错误处理机制的目的是确保应用程序优雅地处理异常,并且不会向用户显示敏感信息。 - 查看与安全性相关的HTTP标头:
HTTP响应标头用于提高应用程序的安全性,并限制现代浏览器运行到易于预防的错误中。这为部分缓解现有问题提供了明显更快,更便宜的方法,并为新应用程序提供了额外的防御层。分析师可以确保的一些常见标头是:
Header Name Example Strict-Transport-Security Strict-Transport-Security : max-age=16070400; includeSubDomains X-Frame-Options X-Frame-Options : deny X-XSS-Protection X-XSS-Protection: 1; mode=block Content-Security-PolicyContent-Security-Policy, X-Content-Security-policy, X-WebKit-CSP, Content-Security-Policy: default-src ‘self’ - 查看Cookie:
Cookies通常是恶意用户的关键媒介,因此审阅者必须查看为cookie设置了哪些属性,并测试它们是否安全。需要审查的一些属性是:
Attribute Reason Secure Cookie containing sensitive information is transmitted over an encrypted connection. HttpOnly Cookie cannot be accessed by client-side APIs such as JavaScript. Expires Signifies how long the browser should use the cookie and when to delete.