原文地址:
摘要:什么是安全编码,为什么它很重要?
安全编码是什么以及为什么它很重要:安全编码是一种编程实践,旨在减少或消除软件中的安全漏洞。这些漏洞通常源于应用程序或程序的源代码,恶意用户可以利用这些代码中的缺陷或错误来控制程序,以谋取私利。
漏洞的来源:大多数安全漏洞都源自应用程序或程序的源代码。程序代码中的缺陷或错误可以被恶意用户轻易利用。
安全编码的重要性:幸运的是,通过遵循一些已经建立的安全编码标准,比如OWASP(开放网络应用安全项目)和SEI Cert(软件工程研究所的认证),可以缓解大多数常见的软件安全漏洞。
安全编码的关键组成部分:
- 数据输入验证:确保输入数据的合法性和安全性。
- 认证和密码管理:确保用户身份验证过程的安全性,以及密码的存储和管理。
- 访问控制:控制用户对资源的访问权限,确保只有授权用户才能访问敏感数据。
- 保持简单:简化设计和实现,减少复杂性可以降低出错的机会。
- 加密实践:使用加密技术保护数据的安全性。
- 错误处理和日志记录:正确处理程序中的错误,并记录关键信息以便于问题追踪和分析。
- 数据保护:采取措施保护数据不被未授权访问或泄露。
- 威胁建模:识别、量化和优先处理潜在的安全威胁。
安全漏洞利用向我们展示了软件代码的脆弱性。软件代码是应用程序工作方式的核心。如果你的代码存在安全漏洞,你的整个应用程序可能容易受到网络攻击。快速浏览一下过去一年的科技头条新闻,就会发现软件中的安全漏洞被未经授权的用户利用的频率有多高。苹果和谷歌这两家大型科技公司报告了各自操作系统中的漏洞。甚至提供开源软件的IBM子公司红帽也报告了其Linux Enterprise版本中的一个漏洞,该漏洞正被积极利用。
防止可能导致敏感数据和其他个人信息泄露的网络安全事件,从软件开发过程的一开始就从源代码本身开始。在本文中,我们将介绍什么是安全编码,为什么它很重要,以及顶级安全编码实践是什么。
什么是安全编码?为什么安全编码很重要?
编码或计算机编程是用计算机可以解释的语言设计可执行程序的实践。当软件开发人员编写此源代码时,他们需要考虑许多事情,例如:
- 应用程序的架构和设计要求
- 代码优化和效率
- 代码安全
安全编码使开发人员和程序员更容易通过遵循某些最佳实践和指导方针(称为安全编码标准)来清除软件中的常见漏洞。
采用安全编码实践非常重要,因为它消除了常用的软件漏洞,并防止了网络攻击的发生。此外,从一开始就优化安全性有助于降低长期成本,如果漏洞利用导致用户敏感信息泄露,可能会产生长期成本。尽管以安全的方式编码很重要,但软件漏洞仍然猖獗。使用美国国家标准与技术研究院(NIST)漏洞列表进行的搜索显示,仅在过去三年中,就有40569个应用程序漏洞。我们在下面列出了一些最佳的安全编码实践,试图减少软件漏洞,使计算机程序对每个人都更安全!
如何安全地编码?
有大量关于安全编码最佳实践的文献。例如,开放Web应用程序安全项目(OWASP)创建了一套指导方针,帮助开发人员减轻常见的软件安全漏洞。同样,SEI CERT安全编码标准规定了程序员可以采用的十种安全编码最佳实践,以最大限度地提高应用程序的安全性。
我们从这两个来源中提炼出了一些最相关的做法:
1.数据输入验证
这涵盖了数据源和输入验证的许多方面。对网络安全的大多数威胁来自外部数据输入,包括跨站脚本、缓冲区溢出和注入攻击。
因此,至关重要的是建立安全实践,管理哪些来源是可信的,以及如何验证来自不可信来源的数据。
2.身份验证和密码管理
限制授权用户访问该程序是防止网络攻击和数据泄露的有效方法。身份验证和密码管理的一些最佳实践包括:
- 使用可信系统进行密码哈希
- 强制执行密码长度和复杂性要求
- 在受信任的服务器上存储身份验证凭据
- 使用多因素身份验证
3.访问控制
访问控制与身份验证齐头并进,以确保恶意用户无法轻松访问目标系统。一般来说,最好采用默认的拒绝方法,这意味着不能证明授权的用户应该被拒绝访问。对于需要延长登录时间的web应用程序,代码应该需要定期重新授权才能持续访问。
4.保持简单
虽然这可能不直观,但保持代码简单整洁是确保其安全性的好方法。这是因为复杂的设计增加了漏洞潜入代码的可能性。开发人员在编写软件时应避免不必要的复杂性,只包含必要的内容。
5.密码实践
上述安全编码标准强调了实施有效的加密过程以保护应用程序用户机密的重要性。作为加密过程的一部分生成的所有随机值都应使用经批准的随机数生成器生成,以确保它们是不可测的。
6.错误处理和记录
即使是编写得最好的代码也可能会遇到错误。重要的是,当错误出现时,我们会尽早识别和处理,以控制其影响。
错误的准确识别取决于对代码中发生的所有事件的有效记录。开发人员可以访问这些日志来诊断可能出现的任何错误。但请注意不要在错误消息或日志中包含任何敏感信息!
7.数据保护
大多数网络攻击的目的是访问敏感数据。因此,数据保护是安全编码要求的一个重要方面也就不足为奇了。有效保护数据的一些有用提示包括:
- 遵循最小特权原则,即代码元素应以完成作业所需的最小特权集执行
- 定期删除服务器上存储的敏感数据的临时或缓存副本
- 不在客户端以明文或任何非加密方式存储密码和连接字符串
8.威胁建模
即使不是不可能,也很难保护自己免受你不知道的威胁。这就是为什么威胁建模如此重要。它涉及识别潜在威胁,然后定义对策以防止或减轻其发生。应定期进行威胁建模练习,以确保不遗漏任何新的风险。
9.超越编码
实施上述准则应有助于清除源于代码本身的大多数漏洞。然而,确保代码的安全是一个持续的过程,需要时刻保持警惕。需要成为创建安全代码的整体方法的一部分的其他领域包括:
- 一个基于“最小特权”的系统:在需要知道的基础上保持对任何代码的访问将有助于防止任何注入攻击。当使用外包开发人员或开发公司时,这可能会特别棘手。
- 深度防御:随着代码被推广到生产环境,继续分层防御策略。确保你的运行时环境和你的代码一样安全。
- 实践良好的质量保证:使用各种保证程序,如代码审查和PEN测试,以确保质量。
- 了解如何将软件开发生命周期(SDLC)应用于安全编码。使用SDLC方法将帮助您确保安全性贯穿开发生命周期的所有部分。
成功安全编码的资源
让您的开发团队接受培训并了解最新的安全编码标准对于安全编码至关重要。你不能指望程序员从一开始就知道如何安全地编码。相反,他们需要接受培训,了解不同的安全编码实践以及常见的安全漏洞。
下面是一些有用的资源,可以帮助您和您的团队在创建安全代码的道路上前进。
资源 | 说明 |
帮助开发人员避免常见软件编程错误的有用基石。此外,请查看他们的工具,该工具可以查找可能影响您项目的依赖关系和公开披露的漏洞。 | |
与OWASP和SEI Cert一样,微软还为为为其产品创建软件的开发人员制定了一份安全编码实践指南。该指南涵盖了软件开发生命周期的每个阶段,非常全面。 | |
OWASP SKF是一个开源web应用程序,它解释了不同编程语言的安全编码实践。无论您使用哪种语言,这都是让您和您的团队快速掌握安全编码基础知识的好方法。 | |
CheckMarx和CAST都是分析和研究代码以识别潜在安全漏洞的公司的例子。如果您几乎没有安全编码的经验,那么使用他们的服务来确保源代码的安全性和健壮性将是一个好主意。 | |
教程是让你的团队开始安全编码实践的好方法。RedHat提供的教程涵盖了输入验证、授权和其他安全编码实践的基础知识。 |
安全代码以获得竞争优势
安全始于代码,创建安全代码是创建优秀软件产品的重要组成部分。
不安全的编码实践不仅会让你的客户面临风险,还会影响你公司的声誉。应用SEI CERT和OWASP安全编码指南的原则是一个很好的起点。生产明显安全的软件不仅可以防止网络攻击,还可以为您的组织提供竞争优势。
安全编码:常见问题
安全编码可能是一个复杂的主题,有很多技术术语,使得普通用户很难轻松理解它。为了解决这个问题,我们在下面的部分中提供了有关安全编码的一些最常见问题的答案。
如果我们错过了什么,请使用评论告诉我们!
是什么让代码不安全?
代码是指定义计算机程序如何运行的一组指令。代码是由开发人员使用 Java 和 Python 等编程语言编写的。
在编写此代码时,开发人员有时可能会无意中犯错误或留下空白,使软件容易受到未经授权的用户的利用。这些错误或差距可能会使代码不安全。
为什么要使用安全编码标准?
使用安全编码标准是一种系统且实用的方法,可以从代码中清除任何常见的软件漏洞。通过遵循 OWASP 和 SEI CERT 等标准,您可以使您的软件对用户更安全,并避免因任何漏洞利用、黑客攻击或违规而导致的法律和财务复杂性。
什么是最佳的安全编码实践?
We would say the following elements are critical to secure coding, based on our study of credible secure coding standards, such as OWSAP and SEI CERT:
- Input Validation
- Access Control
- Authentication and Password Management
- Threat Modeling
- Data Protection
- Cryptographic Practices
- Error Handling and Logging
- Keeping it simple
哪种编程语言最安全?
研究表明,Ruby是最安全的编程语言之一,因为它在过去十年中面临的安全漏洞最少。Python也非常安全,自2015年以来,漏洞呈下降趋势。
苏珊·莫罗作者
技术记者
Susan自90年代初以来一直从事IT安全领域的工作,涉及文件加密、数字版权管理、数字签名和在线身份等多个领域。她的口头禅是,安全既是关于技术,也是关于人类。