安全编码实践三个关键原则
共 1921字,需浏览 4分钟
·
2022-01-18 10:06
多数安全漏洞是人为错误的结果。开发人员可以引入Web应用程序漏洞和API安全问题。因此,构建安全应用程序的基础方法是尽一切可能首先避免引入此类错误。
我们可以找到一些关于如何在应用程序开发过程中创建安全代码的详细指南,例如,Open Web Application Security Project (OWASP) 提供的指南。他们专注于输入验证、输出编码、访问控制、通信安全、数据保护、加密实践、错误处理、最小特权原则等细节。此外,我们还应该从战略角度来看待软件安全问题。
原则 1:传播意识和教育
在大多数情况下,开发人员在编写的源代码中引入安全风险只是因为他们没有意识到这些风险。虽然大学经常侧重于教授形式验证等细节,但很多大学都没有专门开设网络安全课程,甚至没有提到注入攻击或跨站脚本(XSS)等主题。
在大学学到的编程语言是有限的,因此开发人员在大多数情况下会有自学的内容,并且一些安全问题是编程语言特有的。
为了确保你的软件开发团队不会因为缺乏意识、理解或教育上的差距而犯错误,可以从战略上看待这个问题:
安全问题应该是从开发还未进行时就提前想到的,尤其项目经理对安全的重视。对于开发人员,可以在编码过程中对其进行安全编码标准的培训。
需要注意的是,无论您的开发人员对安全性有多了解,由于技术进步的速度,新技术和攻击经常出现。因此不要期望开发人员可以一直不犯错,而是让开发团队和安全团队密切合作。
原则二:引入多层验证
即使是最有意识和受过最好教育的开发人员也会犯错误的可能,所以除了相信他们能编写安全的代码,还需要在开发过程中实时工作的自动审计工具,以帮助他们认识到错误并采取适当的解决方案。
在理想情况下,一般会使用以下工具和方法来测试软件:
一个内置在开发环境中的代码分析工具。这种工具可以在开发人员输入代码时即时防止出现基本错误。
作为CI/CD管道的一部分工作的SAST(静态应用程序安全性测试)解决方案。这种解决方案在构建源代码之前对其进行分析,并能发现潜在的软件漏洞。
作为CI/CD管道的一部分工作的SCA(软件组合分析)解决方案。由于现在大多数代码不是直接来自开发人员,而是来自他们使用的开源库,因此通过SCA帮助他们确保他们使用的是此类库的安全版本。
作为 CI/CD 管道的一部分工作的DAST(动态应用程序安全测试)解决方案。这样的解决方案在运行时分析应用程序(在编译之后,无法访问源代码)并找到安全漏洞。
对无法自动发现的错误进行额外的手动渗透测试,例如业务逻辑错误。但是,这需要专门的安全人员并花费大量时间,因此通常仅在软件开发生命周期 (SDLC) 的最后阶段执行。
早期的安全测试不但可以提高软件安全,而且还能大大降低修改漏洞的时间和成本,为企业避免遭到网络攻击的风险。
原则 3:尽早测试以提升责任感
要获得最高的代码质量,仅仅有安全的编码需求和安全的编码准则以及测试基础设施是不够的。开发团队编写安全代码除了是在遵循安全编码原则,而且编写安全的代码也符合他们的最佳利益。安全编码不仅需要规则和执行,还需要正确的态度。
左移方法有许多优点,其中之一是让开发人员意识到他们是安全环境的一个组成部分。这使得他们觉得对代码安全性有责任,并且意识到如果犯了错误,他们会立即修复它,而不是指望别人稍后来做。
当然,您可以在应用程序投入生产之前或什至在生产中(右移)测试您的应用程序是否存在安全漏洞。但是,与向左移动相比,它会花费更多。该软件将不得不再次经历所有阶段,这涉及其他资源,而不仅仅是开发人员。开发人员不会记住他们使用的代码,或者修复程序可能会分配给与原始开发人员不同的开发人员,因此,开发人员将需要更多时间来查找和删除漏洞。因此,延迟测试可能会延迟发布甚至数周。
当然,企业也可以尝试将安全测试“右移”,但这付出的代价要比左移大得多。软件将不得不再次经历所有阶段,这涉及到其他资源,而不仅仅是开发人员。开发人员很可能不再熟悉他们编写的代码,或者修复问题可能分配给不同的开发人员,从而导致不得不花费更多的时间来发现并修复安全漏洞,延迟测试将会推迟发布时间。
不仅仅是安全政策
总之,意识到安全问题很有必要,但如果认为其是一种限制而非增强则是不够的。安全始于构建应用软件时正确的态度。即使是用于维护安全的最好工具也必须在过程中以正确的方式使用,以便它们被认为是有帮助的而不是一种“累赘”。
参读链接:
https://www.acunetix.com/blog/web-security-zone/secure-coding-practices/