随着安全得到越来越多的关注,一些跟安全相关的理论(比如BSI)脱颖而出,尽管这些理论提出来已经有一段时间,却很少看到其在开发团队被成功地应用。我们知道微软曾在十多年前就提出了SDL,却没能在业界推广开来,并不是人们不认可微软这种“从软件生命周期保障安全”的理念,而是考虑到其落地实施的难度,很多企业知难而退,那么这些安全理论对我们的软件安全真的有帮助吗?安全实践能落地吗? 很幸运地,我有机会在一个成熟的敏捷开发交付小组中经历了“从完全没有安全实践到BSI”的过程,我们也曾遇到过很多困难,但最终得到了客户的认可,并成功把安全实践推广到了整个团队,所以想跟大家分享一下我们是如何将安全在敏捷团队落地的,希望能给大家一些帮助。文中会拿Web系统举例,但一些落地的实践同样适用于非Web系统。 为什么安全理论很难落地? 结合对一些团队的了解,原因大多来自以下三个方面: 认为安全不重要 认为安全太难,需要很广很深的领域知识,只有专业人员才能做到 不知道应该用什么样的流程来做安全 那么针对第一点,因为我本身也是交付团队的一员,我观察到的大多数软件开发团队,不管是业务分析师、开发人员、测试人员、体验设计师还是项目经理,都很少有人真正把“安全”作为非常重要的一件事情,尤其是在交付压力比较大的情况下,我们都会舍弃对于安全的投入,而花时间在更容易可视化出来的用户功能上。安全,很多时候就像灭火器,如果不发生火灾,我们甚至都感觉不到它的存在。那么,安全,真的重要吗? 换位思考一下,如果我们是用户,面对以下两种选择,我们会选择哪一种? 系统A:设计非常完美,功能缺陷几乎没有,性能也很棒,但是没有做任何跟安全相关的防护,用户的敏感信息很容易泄露; 系统B:设计比较差,有一些功能缺陷,性能也差一点点,但是采取了特别多的安全措施,能够保障用户的数据安全性; 相信几乎所有人都会毫不犹豫选择B系统,除非这是一个完全没有用户敏感数据、完全不需要安全保障的系统(那这样的系统又有什么用?),开奖,所以只要我们把自己放在产品使用者的角度,而不是产品制造者的角度,就能很容易地理解和认可安全对于软件系统来说是比功能更重要的一个因素,安全是软件的灵魂。 那么对于很多已经深刻认识到安全重要性的团队,为什么依然很难将安全理论落地呢?原因大多来自前面提到的第二点和第三点,一是从技术上认为安全是一个很难的领域,需要专业的安全人士;二是从流程上不知道该如何开展;从这两个角度出发,“安全”需要巨大的投入,所以很多团队望而却步。那么安全真的这么难落地吗? 接下来我会简单介绍一些Web安全知识,然后通过我所在团队的落地过程给大家一个答案。 如何让安全在敏捷团队落地什么是Web安全? 所谓Web安全问题,就是攻击者可以通过非正常的手段,获得Web系统访问权限,从而破坏网站行为,盗取甚至修改用户数据的一系列问题。 那么为什么攻击者可以获得Web系统权限呢?这种几率到底有多大呢?如果可能性非常小,我们是不是不必花费太多精力在安全上面呢? 我们来看一下Web系统的组成,一个最简单的系统都至少有这么几个部分:
如上图,浏览器发送请求到服务器,服务器给浏览器响应,服务器会查询数据库,数据库返回结果。在这个过程中,我们开发的Web程序不可避免的存在安全漏洞,甚至我们开发系统所使用的编程语言也会有安全问题。在开发时,我们常常会引用一些第三方的工具、组件,而第三方的安全性也没有办法保障,甚至数据传输过程中使用的协议、操作系统本身也会有安全问题。所以可以想象一下,如果我们不做任何的安全防范,那么每一个软件都是一个非常脆弱的系统,很容易出现安全问题。 常见的Web安全问题 既然这么多环节都有潜在的安全风险,那么该如何着手呢?可以参考OWASP TOP 10,以便对最严重的Web应用程序安全问题有个大致的了解。 敏捷开发模式现状 我们是一个已经实施敏捷开发七年的团队,一共有五十多人,划分成不同的Feature小组进行日常的工作,其敏捷开发模式已经非常成熟,我所在的Feature小组有6个开发人员,1个业务分析师,1个QA,我们每个小组的交付模式都是这样的: (责任编辑:本港台直播) |