【51CTO.com快译】对安全性的考量应该从软件的开发伊始就受到足够的重视,这已然成为预防攻击活动并保护全球用户的重要前提。下面,我们一起来了解每位开发者皆应了解的基本安全常识。
对输入内容保持怀疑
作为起点,软件保护工作应该对一切接收到的信息与数据进行检查。事实上,预防恶意输入内容接触您的软件并实施执行,将有效提升攻击或者安全违规行为获得成功的难度。
然而,开发者往往更倾向于对输入内容进行错误检查。这显然是种误区,因为攻击者可以轻松绕过这些非正确值,并且进入变更正确值的模式,以至于我们无法检查到其篡改的内容。而作为开发者,我们应根据模式对输入内容进行检查,且拒绝一切与正常使用模式不符的输入信息。
减少攻击面
所谓攻击面,是指所有攻击点与攻击量的总和,黑客或者未授权用户可能突破安全保护,接触数据并窃取敏感信息。所谓攻击微量是指恶意代码的执行方法,例如病毒或者蠕虫,其能够感染目标计算机并进一步传播至更多设备当中。
黑客只需要找出一个薄弱点即可成功入侵。正因为如此,现代企业需要尽量减少攻击面,同时利用可视化系统绘制所有路径、网络与设备,从而及时发现弱点并消除相关威胁。
但同样重要的是,减少攻击面并不能降低黑客成功入侵之后所造成的危害与后果。事实上,减少攻击面的作用在于降低发生安全问题的几率。具体来讲,我们可以通过减少代码运行量、减少未授权用户可用代码以及减少可利用入口点等方式实现攻击面控制。
以安全方式应对失败
每套系统都可能遭遇入侵,这种失败是不可避免的。而黑客自然会积极利用各类手段促使这种失败的发生,包括触发特定故障以控制系统或软件。正因为如此,我们必须制定合理的应急计划。
在系统发生故障时,最重要的是确保默认值符合安全要求,即默认拒绝访问。此外,大家应检查故障返回值,撤销其间的一切变更,并在故障后保证恢复至安全状态。另外,即使可访问性已经遭到破坏,系统的隐私性与完整性仍应保持不变。
另外,我们应确保黑客无法在系统故障期间访问受保护的限制性数据。在系统发生故障时,往往会显示一些与问题相关的敏感信息,而这些很可能为攻击方带来启发。因此,我们应在默认情况下要求系统故障出现时拒绝访问,并仅在预设条件得到满足后才重新恢复可访问能力。
使用威胁建模
提升软件或应用程序安全性的最佳途径之一,在于利用威胁建模对其进行测试。基本上,威胁建模就是在模拟攻击者如何突破安全保护并夺取软件控制权或盗窃有价值数据。开发者可以借此发现软件中的漏洞,并消除风险或威胁。
威胁建模应在开发流程起始时开始进行,并一直持续至流程结束。如此一来,开发者即可全程确保对安全漏洞的监控,同时发现编写代码时是否引发其它疏漏。
一般来讲,威胁建模基于安全对象发现,例如对用户身份进行保护、关注应用程序安全问题可能带来的声誉影响,同时对应用程序的数据流、组件与受信边界加以衡量。在评估之后,我们即可立足安全威胁及漏洞层面对应用程序进行分析。另外,我们还应立足黑客视角模拟攻击树结构,进而确定攻击条件。通过这种角色换位,大家将更好地防范攻击并保护软件。
软件开发是一项复杂的流程,一旦黑客发现了可乘之机,那么此前投入的一切努力都将付之东流。因此,每位开发者应从起步时即高度关注安全保障工作。事实已反复证明,在问题发生后再行保护的实施难度与实现成本会更高昂。
原文链接:https://dzone.com/articles/4-things-that-every-developer-should-know-about-se (作者 Oscar Waterworth)
【51CTO译稿,合作站点转载请注明原文译者和出处为51CTO.com】