作为一位软件开发人员,该如何确保开发过程的安全性呢?软件开发工程师可以使用多种方法来确保代码和数据的安全。

译者 | 张增斌

策划 | 徐杰承


目前,为了缩短软件的上市时间,几乎每一家企业都在寻找能够使软件开发过程提速的方法。但在这其中,大量企业并没有充分考虑软件安全性相关的问题。


那么作为一位软件开发人员,该如何确保开发过程的安全性呢?软件开发工程师可以使用多种方法来确保代码和数据的安全。


1、模块化编码

软件已经成为我们日常生活的重要组成部分,因此我们遵循安全编码实践才有意义。毕竟,软件开发工程师需要对代码的安全负责,我们需要确保不会危及到代码的安全性。


好消息的是,安全编码实践并不是一件新鲜事。事实上,大多数有经验的软件开发工程师已经熟悉其中的一些规则。


安全编码最基本的概念之一是处理异常的概念。异常可能由于多种原因而发生,包括输入错误、逻辑错误或配置错误。


为了使软件更加安全,必须假设在某些时候会出现异常。与其让这些事件发生,不如通过捕获它们并执行一些操作来阻止代码继续执行。


2、代码混淆


代码混淆是一种重要的做法,它可以防止黑客访问应用程序中的敏感信息。而代码混淆涉及各种技术,例如算术混淆,将正确的数值替换为具有误导性的数值。


字符串加密是另一种代码混淆方法,它将字符串隐藏存储在可执行文件中,然后在运行时显示原始值。


代码混淆使代码难以阅读,通过删除换行符和空格,降低代码的可读性。这种做法是提高程序性能的好方法,但同时代码混淆也存在很多风险。


虽然它看起来无危害,但它会带来严重的安全后果。例如,如果攻击者可以读取软件的代码,他们就可以使用它来提取敏感信息,例如API密钥或密码。


使用代码混淆的主要好处是它可以生成更轻便的应用程序和更高效的代码执行。此外,它还可以保护你的知识产权。在某些情况下,攻击者会通过泄露代码中的安全漏洞来敲诈行业巨头。


这是应用程序开发工程师用来保护不同程序代码的常用方法。因为直接用肉眼查看代码时,混淆代码几乎无法理解。


3、访问控制


安全编程最重要的方面之一是访问控制。它允许开发人员限制对敏感数据的访问,同时防止访问不受信任的数据。它还通过限制对具有正确权限的用户的访问来防止数据从系统泄漏。


除非经过身份验证,否则用户将无法登录到管理页面。


为确保安全的编码实践,开发工程师应评估其软件开发生命周期的成熟度以及开发工程师的技术栈。


安全编码实践只能由拥有足够能力和经验丰富的开发工程师实施。开发工程师应该能够在提交代码之前验证系统设计并验证输入。


访问控制是安全编码框架的一个重要方面,开发工程师必须了解如何实施它。缺乏适当的访问控制可能会导致灾难。幸运的是,有许多技巧和工具可以帮助开发工程师保护他们所开发的软件。


例如,开发工程师应始终加密敏感数据并以加密形式存储。为了进一步提高安全性,开发工程师应将敏感数据嵌入本地参数存储、var文件和代码存储库中,切勿让其处于不受保护的状态。


安全编码是开发工程师设计代码以遵循安全最佳实践的过程。此过程保护已发布的代码免受已知和未知漏洞的侵害。它还可以防止黑客利用安全漏洞并将其用作攻击系统的载体。


成功实施安全编码实践需要改变公司内部的文化。


4、阻止反射型XSS


XSS攻击有两种类型:持久型攻击和反射型攻击。持久型XSS攻击针对易受攻击的网站或应用程序的所有用户。当攻击者将恶意脚本注入链接,然后用户单击它执行它时,它就会起作用。


另一方面,反射型XSS只需要用户单击一次。


这种类型的XSS攻击使用JavaScript代码在被攻击者的浏览器中运行并利用各种漏洞。该代码还可用于获取对用户计算机的访问权限、加入僵尸网络或窃取用户敏感数据。大多数反射型XSS攻击都是基于社会工程技术。


攻击者可以通过制作伪造的登录页面来诱使用户相信他们正在登录安全网站。这允许攻击者窃取用户的密码管理器,从而导致安全漏洞。


反射XSS攻击更难检测。攻击者通过钓鱼邮件向被攻击者发送恶意URL。受害者的浏览器然后加载站点的搜索页面。后端处理搜索词,攻击者将恶意脚本插入到响应中。


另一种类型的XSS攻击涉及使用不受信任的输入。这些攻击是攻击者渗透网站并攻击其用户的好方法。出于这个原因,开发工程师应该采取措施通过遵循安全编码实践来保护他们的Web应用程序。


例如,使用OWASP编码项目库,开发工程师可以通过启用“X-XSS-Protection”标头来轻松保护他们的Web应用程序。


5、在开发过程前期发现漏洞


软件漏洞是应用程序设计或实现中的弱点,可能允许未经授权的用户运行命令或利用系统。


虽然并非所有软件安全缺陷都是实施错误,但大约一半的可利用安全缺陷是由于软件设计缺陷造成的。这意味着组织需要时刻保持警惕,以识别和修复潜在的漏洞。


漏洞按照严重性和风险分类,可能会影响软件、服务器和网络。如果没有修复漏洞,网络犯罪分子可能会利用这些漏洞窃取敏感数据、中断服务或破坏公司资产。


因此,在开发过程的前期识别和修复漏洞非常重要。


漏洞可分为高风险或低风险。这就是为什么对漏洞的严重性进行优先排序并以系统的方式对修复进行优先排序很重要。


一旦确定了漏洞,公司就可以使用漏洞评估来确定对此负责的组件,并确定哪些组件需要更新或配置更改。


漏洞是由不良的输入验证和过滤引起的。如果攻击者发现敏感输入,他们可以运行任意命令,包括JavaScript、SQL查询或SMTP参数。他们甚至可以远程控制服务器并访问底层应用程序数据。


6、记录安全编码实践


安全编码实践是网络安全的关键部分。他们要求开发工程师负责保护他们的代码免受恶意攻击和威胁代理。开发工程师应遵循几种不同的做法。以下只是几个例子。


无论你的平台、语言或实现如何,你都应该遵循安全编码实践。


通常,安全编码实践侧重于编写没有已知漏洞的代码,这些漏洞可能会暴露数据或对系统造成损害。当应用程序不安全时,黑客攻击者可以访问它们并使用它们包含的信息来渗透系统。


此外,不安全的应用程序会对公司的声誉产生负面影响。安全编码实践旨在检测和消除软件应用程序中的这些漏洞,最大限度地减少数据破坏的可能性并允许安全地使用应用程序。


开发工程师必须理解这些问题并适当地记录它们。大多数漏洞是由典型的编程错误引起的。


通过收集常见的编程错误和安全编码实践,开发工程师可以创建测试用例以确保他们的代码遵循这些规则。


此外,开发工程师可以使用代码签名过程来保护他们的软件代码免遭篡改。使用测试用例和实现日志记录,开发工程师可以帮助调试错误。


每个开发工程师都应该理解的记录安全编码实践应该包括指南和最佳实践。理想情况下,文档应包含示例和易于实现的语言。它还应包括有关手动测试和合规性测试的指南。


原文链接:https://hackernoon.com/secure-coding-practices-every-developer-should-know


译者介绍

张增斌,51CTO社区编辑,多年的安全攻防从业经验,主要研究方向:安全开发、逆向破解、漏洞挖掘、黑灰产攻防对抗。

责任编辑:武晓燕来源: 51CTO技术栈