每位开发人员都应该知道的安全编码实践
译者 | 张增斌
目前,为了缩短软件的上市时间,几乎每一家企业都在觅觅能够使软件开发过程提速的方法。但在这其中,大量企业并没有足够考虑软件安全性相关的问题。
那么作为一位软件开发人员,该如何确保开发过程的安全性呢?软件开发工程师可以使用多种方法来确保代码和数据的安全。
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、笔录安全编码实践
安全编码实践是网络安全的要害部分。他们要求开发工程师负责保护他们的代码免受恶意进攻和威逼代理。开发工程师应遵循几种不同的做法。以下只是几个例子。
无论你的平台、语言或实现如何,你都应该遵循安全编码实践。
通常,安全编码实践侧重于编写没有已知漏洞的代码,这些漏洞可能会暴露数据或对系统造成损害。当使用程序不安全时,黑客进攻者可以访问它们并使用它们包含的信息来渗透系统。
此外,不安全的使用程序会对公司的声誉产生负面影响。安全编码实践旨在检测和消除软件使用程序中的这些漏洞,最大限度地减少数据破坏的可能性并答应安全地使用使用程序。
开发工程师必须理解这些问题并适当地笔录它们。大多数漏洞是由典型的编程错误引起的。
通过收集常见的编程错误和安全编码实践,开发工程师可以创建测试用例以确保他们的代码遵循这些规则。
此外,开发工程师可以使用代码签名过程来保护他们的软件代码免遭篡改。使用测试用例和实现日志笔录,开发工程师可以扶助调试错误。
每个开发工程师都应该理解的笔录安全编码实践应该包括指南和最佳实践。理想情状下,文档应包含示例和易于实现的语言。它还应包括有关手动测试和合规性测试的指南。
原文链接:
译者介绍
张增斌,51CTO社区编辑,多年的安全攻防从业体会,主要研究方向:安全开发、逆向破解、漏洞挖掘、黑灰产攻防对抗。