安全编码已正确完成

2020-08-07 23:11:06

安全性是软件开发中最重要的方面之一。公司关注开发人员生产的代码量的日子已经一去不复返了。现在,他们关心您的代码的质量和安全性。

过去几年来,安全漏洞的数量不断增加,令人担忧。我们经常听到可怕的故事,说数百万人的个人信息和财务记录在数据泄露后被泄露。随着这一趋势的发展,每个开发人员都应该专注于构建更安全的系统。

在本文中,我将整理一系列实践,在我看来,这些实践为构建更安全的应用程序提供了坚实的基础。在过去的几十年里,我与多家公司的数百名开发人员合作过,我有幸与不同的开发专业人员互动,并从他们那里学到了很多东西。

在创建第一个类或形成第一个循环之前很久,编写干净安全的代码就开始了。在设计系统时,我看到一些架构师更多地关注功能需求,而忽略了事物的安全方面。他们倾向于认为访问控制和其他安全措施将在开发阶段的后期实施。

这是不对的。相反,开发团队应该在应用程序开发期间接受安全按设计的概念。

在设计阶段,为您的项目准备一份技术和法规安全要求列表。想一想将在应用程序开发中使用的每个组件,从类级语言到API端点授权。

从项目开始就牢记安全性是消除产品体系结构固有弱点的最佳方式。此外,随着系统的发展,实现安全控制或解决漏洞变得更加困难。

威胁建模是在应用程序设计阶段实施安全的一种经济高效的方法。它涉及识别软件的潜在威胁、分析其风险,以及开发要在设计、编码和测试阶段实施的缓解策略。

通过对代码的威胁进行建模,您可以在开始编码之前预测可能影响应用程序的威胁类型。例如,如果您处理信用卡号码、个人身份信息或知识产权,将更容易识别可能的安全风险并设计出保护您的应用程序的方法。

如果您可以想象代码受到攻击,则可以在设计和实现系统时牢记该威胁。

如果您查看绝大多数软件漏洞,您会意识到它们有一个共同特征,即它们源于不正确的输入验证。考虑一下SQL注入、跨站点脚本、LDAP注入、XPath注入、缓冲区溢出、不受控制的字符串格式和其他常见的安全漏洞。

因此,我将坚持这一点-在证明事实并非如此之前,始终将所有输入视为不可信的。有时持怀疑态度是有回报的。只要数据来自外部来源,就有充分的理由进行验证。无论输入来自环境变量、网络接口、命令行参数还是用户控制的文件,都应该这样做。

例如,在开发PHP应用程序时,您需要验证几个元素。下面是一个示例类,您可以调用它来验证表单中的用户输入。

传递到输出子系统的数据可能包含恶意内容,特别是当它来自不受信任的来源时。如果没有正确转义或清理,此数据可用于促进注入攻击。因此,输出清理与正确的输入验证一样重要,以防止攻击。

要解决这个问题,我可以创建一个ValidateOutput类,它将标准化输出并使用白名单清理它。请注意,根据输出字段的不同,您可以使用不同的白名单模式。

每个开发人员都至少参加过一次关于安全编码实践的讲座。这可能会很无聊,但保护您的代码很重要。

您在应用程序开发过程的每个阶段都应该遵循的一些安全编码标准包括:

不要实现您自己的身份验证和授权系统。相反,可以考虑通过双因素身份验证添加额外的安全层。

将正确的安全工具集成到IDE、源代码存储库、错误跟踪系统和开发过程中使用的其他环境中。

代码安全性是代码质量的最终衡量标准,实现这一点并不难。我见过我的大多数同事通过过度考虑安全设计来使事情复杂化。最后,他们有一个奇怪的复杂系统,更难保护。

最好的方法是让你的设计尽可能简单。这样,您就可以了解并证明系统的安全性。

在编写代码时接受上述实践。这肯定会为当今更安全的世界做出贡献。