安全软件开发的三大错误

本文讲的是 安全软件开发的三大错误,许多开发人员如今已经认识到安全软件开发的重要性,但更重要的是,我们必须明白,计划进行安全软件开发和实现它并不是同一回事。

实际上,一些软件开发公司首先得将安全完全集成到他们的开发过程中来。时间和资金限制是公司面临的常见阻碍,但开发人员的错误同样能造成该集成过程的延迟或错误导向。
下面是开发人员容易犯下的三大错误:

错误 #1:项目最后才匆忙上马安全

公司企业必须在开发过程之初就有一个安全计划。这种前瞻性可以让开发人员采用安全的架构和设计方法,也能更容易地保证代码的整体安全。一个制定良好的安全计划,对今天的软件用户而言尤其重要,他们期望开发人员给他们提供安全的产品。

当你推迟项目某个子系统的安全工作,稍后你将不得不对整个系统的很大一部分进行返工和重新测试。你当然可以延迟日志之类代码库才关心的事,但如果你因为复杂和昂贵而推诿系统访问控制的实现,那你就错过或低估了重要的项目需求。

错误 #2:没能利用好安全软件开发工具和专门技术

公司企业要能经受得住在软件中采用自己的安全方法的引诱。尤其是在身份验证模型、加密和其他复杂功能方面。没必要重新发明轮子。开发人员只要利用好别人经过验证的安全代码和过程就好。时间已经证明了这些解决方案是切实有效的,换句话说就是,这些前人的经验能够帮助开发人员增加对自身项目安全的自信。

从静态代码分析到渗透测试,当今世界有那么多的资源可以利用,我们再没有借口不在产品发布之前搞清它的安全状况了。而且,还有很多诸如OWASP、SAFECode、BSIMM等公司可以帮你理解怎样打造一个安全的程序。
错误 #3:使用带缺陷的库组件,继承了其他开发者的安全漏洞

开发团队需要确保清楚得知道所用的每个库,以及从其他源引入的代码的出处。还需要查明产品用到的任何第三方代码中使用的安全验证、威胁模型和其他安全保障措施。

从安全和缺陷暴露的角度出发,引入第三方库和框架是一项十分危险的操作。开发外包并不能免除你尽职审查和测试所用代码的职责。近期曝出的Java远程方法调用(RMI)反序列化和Apache Commons Collections库的CWE-502问题就是这方面一个很好的例子——在类路径里包含了这个库本身就暴露出了问题,无论这个库是否被调用。

总结

“模糊不清的安全”要不得。有些开发人员要么将安全实现隐藏起来,要么认为非常复杂的实现能让产品更安全。事实上,建立在已证方法基础上的有效安全实现才更能通过同业审查,而同行审查是增加软件交付前安全缺陷检出率和解决率的良好安全的基石。

然而,不幸的是,很多软件开发团队依然试图在开发末端才解决安全问题。这样是不行的。

要想产生预期效果,安全必须融入整个开发过程,从项目计划初期贯穿到产品部署使用。
任何在产品预定发布时间前夕经历过数据泄露,或收到出人意料的渗透测试结果的人,都相当清楚在开发周期末尾添加安全的痛苦。今天,由于物联网设备和无处不在的计算环境,开发人员理解问题和在实际环境中应用安全措施的压力日渐增大。将安全贯彻始终似乎是一项巨大的投入,但第一时间就做对的花费,绝对比问题出现后再补救的代价要小得多。

时间: 2022-11-27

安全软件开发的三大错误的相关文章

细数BSA软件盗版率之三大错误

商业软件联盟(BSA)发布了第五次年度全球PC软件盗版研究报告显示,2007年全球个人电脑(PC)上安装的软件有38%为盗版.与全球平均盗版率相比,中国市场盗版率仍相对较高,为82%.在亚太地区,2007年软件盗版率平均水平为59%,盗版率最低的国家是日本,为23%:中国和印度的盗版率远高于平均水平:韩国.台湾等国家和地区则明显低于平均水平. BSA承认,在新兴市场中盗版率下降最为显著的是中国.中国的PC 软件盗版率在过去三年下降10 个百分点之后,连续第二年维持在82%的水平.尽管表面上看盗版

提前认识软件开发(4) 破除几个有关软件开发的错误观念

我们做事情的能力能够有所提升,观念的转变是关键. 从学生转变为职业人的过程是很艰难的,因为我们要与自己积累了多年的"老毛病"作斗争,这些"老毛病"包括:做事拖拉.不守时.不遵守规则.怕吃苦等.就像发射火箭卫星一样,摆脱重力的束缚所花费的燃料是最多的,一旦成功,那么以后的流程就会比较轻松了.所谓"万事开头难",也就是这个道理. 那么,要想掌握工作中C语言的基本技能,我们需要破除哪些错误观念呢? 开发(4) 破除几个有关软件开发的错误观念-在破除旧观

让你提前认识软件开发(4):破除几个有关软件开发的错误观念

第1部分 重新认识C语言 破除几个有关软件开发的错误观念           我们做事情的能力能够有所提升,观念的转变是关键.        从学生转变为职业人的过程是很艰难的,因为我们要与自己积累了多年的"老毛病"作斗争,这些"老毛病"包括:做事拖拉.不守时.不遵守规则.怕吃苦等.就像发射火箭卫星一样,摆脱重力的束缚所花费的燃料是最多的,一旦成功,那么以后的流程就会比较轻松了.所谓"万事开头难",也就是这个道理.        那么,要想掌握工

让你提前认识软件开发(51):VC++集成开发环境中Linux下Pclint工程的配置方法及常见错误修改

第3部分 软件研发工作总结 VC++集成开发环境中Linux下Pclint工程的配置方法及常见错误修改   [文章摘要]         Pclint是一种C/C++软件代码静态分析工具.它是一种更加严格的编译器,能够发现普通编译器所不能发现的代码中的很多问题,因此被广泛应用于软件开发项目中.        本文介绍了如何在VC++集成开发环境中配置Linux下的Pclint工程,给出了C语言中pclint规则A检查的常见错误,并描述了对应的修改办法.   [关键词]          VC++

软件开发项目失败大多是因为这三大原因

根据Standish Group发布的2013年统计数据我们可以发现,在2012年只有39%的IT项目取得了成功. 随着IT现在已然成为了公认的增长速度最快的产业之一,相关的各种需要进行完善和优化的项目也越来越多.与其他行业项目相比,软件行业很难确定项目失败的最终根源.不过,通过分析IT项目失败报告,一些常见的罪魁祸首可见一斑. 虽然导致每个项目失败的根本原因不尽相同,但是大多数我们可以归结为这三方面原因:可怜的预算.缺乏沟通和透明.不能适应变化和重新定向. 可怜的预算 俗话说,钱不是万能的,但

《基于模型的软件开发》——1.4 技术革新

1.4 技术革新 在OO范式之前,即使是编程的"黑暗时代",也并非一片混沌.学术界一直致力于调整数学运算使其能够应用于计算环境下的实践.经过认真思考,学术界提供了一种数学通用语言作为软件开发的基础.这是一个特别适用于计算环境的理论和模型集合.今天这些数学运算仍然是软件开发时一切工作的基础. 本书的重点为软件开发的工程方法,因此不会涉及很多理论.然而,主要的相关数学元素以及它们对软件开发的影响很值得用几个小节高屋建瓴地描述.因为这些理论现在仍然存在于OO范式背后,尽管是以一种非常隐秘的方

软件开发的过程中,这些文档你都用到了吗(转)

导读:做软件的目的就是要满足客户的需求,这个需求包括功能.外观.操作.时间及性能等各方面.那么,在软件开发过程中那部分最重要呢,程序员说"毋庸置疑,我编写的程序实现了客户提出的功能以及业务流程,..... 众所周知,做软件的目的就是要满足客户的需求,这个需求包括功能.外观.操作.时间及性能等各方面.那么,在软件开发过程中那部分最重要呢,程序员说"毋庸置疑,我编写的程序实现了客户提出的功能以及业务流程,肯定我是最重要的",美工说"你开发的功能如果没有我的页面美化,是无

提前认识软件开发(2) 软件开发工程师常用的工具软件

有一次,我打开电视机准备随便看看,无意中被一部战争片吸引住了.成千上万的共产党战士搭起云梯,想攻破一座城池.但是城楼上面的敌人负隅顽抗,拼了命地阻击我军的进攻.双方的伤亡都很惨重,但城就是攻不下来.眼看我军剩下的人不多了,突然不知从什么地方开出一辆坦克,两炮就把城门轰开了.我军趁势攻入城中,将敌人全部歼灭了. 这类电视剧比较常见,相信大家看了不止一次.但是,我看完之后,那个场景还一直留在我的脑海里.成千上万的人不如一辆坦克来得直接,说明了什么问题呢?我立马想到了一句古诗:工欲善其事,必先利其器.

面向对象软件开发的十大原则 (二)

对象                     面向对象软件开发的十大原则 (转二) 当定义方法的参数时,一定要使它们可以扩展.例如,下面这行代码是不可扩展的: Public Function PlaceOrder(sLastName as String, sFirstName as String, sAddress as String) 要想调用这个方法你必须传递这3个参数.但是如果你以后决定在定单上还需要电话号码,就必须修改函数签名,这就破坏了兼容性以及每个调用此方法的代码段.为了防止这个问题