如何确保项目开发敏捷和安全两者兼得
前言
敏捷开发是现在主流的开发模式,相对于传统的瀑布式开放,它通过快速的迭代来响应和展示客户的需求,敏捷开发的优点已经是众所周知了。但是敏捷开发已经实施了很多年了,项目安全问题还是和瀑布开发开放模式一样没有得到解决,都是到项目上线前一两个礼拜才进行安全测试和渗透测试。
如何确保项目开发敏捷和安全两者兼得呢?
这种模式有非常大的弊端,第一,很多安全问题应该在架构设计和coding的时候就要考虑到的,在项目快结束的时候去解决已经太晚了。第二,从我的经历来看,大多数项目由于各种原因都会有延迟的情况,这个时候上线压力非常大。即使发现了很多安全漏洞,由于修复代价非常的高,项目经理通常会采取折中的方案来保障上线。任何折中方案都会导致漏洞直接上线,暴露在黑客面前,给产品带来非常大的风险。
将安全问题留到最后解决是非常危险的,但是在立项的时候就把安全问题全部放到项目开始阶段也并不是非常可取的,软件架构包含很多跨功能的需求,比如性能、扩展性以及安全。这些需求通常应该在代码设计前设计和决定如何实施,因为这个时间点才会有足够的信息来做正确的决定。太早的时候决定这些跨功能需求由于没有足够的信息会带来安全风险,等发现想修改架构时因为代价太高,已经太晚了。
将安全问题放在项目开始或者结束的时候来考虑都是极端的做法,那在敏捷开发的项目如何解决安全问题呢?正确的做法是在项目开始时考虑好项目安全需要做哪方面的工作,需要什么样的架构设计,在开发过程中始终考虑安全因素,在项目结束时进行必要的安全测试。
从笔者的个人项目经验,做到以下几点也可以让安全也可以敏捷起来。
1. 贯彻安全编码规范
如果每个开发人员都知道如何编写安全的代码那么很多应用程序的安全漏洞都能够避免。比如:在处理用户输入时,应该知道如何做输入校验。在将用户信息存入数据库时,应该知道讲敏感信息进行加密或者混淆。在进行数据传输时要确保传输通道安全及对内容加密。在返回错误信息和log时要对输出进行消毒等等。精通OWASP Top 10应用安全漏洞是每个应用程序开发人员的必备技能。WebGoat是一个非常好的学习的网站,网络上也有很多相关的支援。中国古话说得好“磨刀不误砍柴工”,在项目开始对程序员举行必要的安全等方面的培训是非常有必要的。
2. 每个项目组应该有一名安全专家
坦率讲让每个程序对安全有深的理解是不现实的,有很多安全问题是需要专家的眼睛才能发现。安全专家是刚需,强烈推荐每个项目组有一个在应用安全领域有比较深研究和理解的资深程序员。需要安全专家的级别和能力可以根据项目对安全的要求来定,当然有条件的情况,专家能力越强对项目的安全保障越好。在没有请安全专家能力的团队可以由安全经验丰富的资深工程师来担任也是可以的。安全专家的主要职责包括:
·在开发安全敏感度非常高的用户故事时和工程师们结对编程
·对工程师的代码进行安全评审,确保代码在提交到代码库前没有安全问题
·在选择使用哪些商业代码,开源库,公共API等第三方库时进行安全分析和决定
·帮助QA人员测试安全敏感度高的用户故事,确保程序安全。
·除了这些以外,安全专家还应该帮助程序员熟悉安全编码,将安全知识分享给每个程序员,提高程序员的安全意识。
识别安全敏感度高的用户故事
八二原则在安全也是适用的,80%的安全问题是由20%的用户故事导致的,安全专家要识别出安全敏感度高的用户故事,将有限的资源有限放在这些故事里。安全专家可以在每个迭代开始前利用计划会议将这些安全敏感度的故事识别出来并标志出来。让每个程序员对这些用户故事在安全方面加以重视。举几个应该标为安全敏感度高的用户故事:
·包含用户输入选项(比如输入框,选择框等等)
·存储数据到数据库
·数据传输到外部系统
·处理外部系统传入的数据
·输出信息到外部系统和文件等。
·处理验证和认证流程
4. 每个安全敏感用户故事都应该有恶意测试 每个用户故事都事先设计可接受条件,项目负责人可以在安全专家的帮助下从安全的角度设计可接受条件,安全专家应该写一些恶意的或者破坏性的测试条件,类似于功能测试用例。就是从黑客的角度去思考问题,如何攻破这些用户故事。
5. 在用户故事被接收前举行严格的安全测试
传统模式是在项目结束前才举行安全测试,在敏捷模式下,每个用户故事在被接受前都应该进行安全测试,QA人员可以在安全专家指导下和功能测试一起执行恶意测试,也可以使用静态和动态扫描工具对代码举行漏洞扫描,一旦发现安全问题,和功能bug一样,用户故事将会退回给开发人员进行修复,修复完毕后再进行测试。这种循环可以进行多次直到没有问题发现。用户故事才能被接受。
安全测试自动化还是手工呢?
自动化化测试是敏捷开发中非常重要的一个基础,也可以说没有自动化就没有敏捷模式。安全测试也是同样如此。自动化不是万能的,很多测试是自动化没有办法完成的,片面追求完全自动化是不可取的。对安全尤其如此,比较好的方式是,安全专家先通过手工的方式找到漏洞,然后将这个找漏洞的过程自动化,避免新的代码改动引起同样的漏洞。如需了解更多测试技术信息请关注:深圳多测师软件与技术服务有限公司
如何确保项目开发敏捷和安全两者兼得相关推荐
- 如何使用Worktile进行敏捷项目开发管理
Worktile在任务管理上采用了看板视图,非常适合进行敏捷项目开发管理.事实上,在开发Worktile的过程中,我们也是自产自销,使用Worktile管理Worktile本身的开发过程,在本文中跟大 ...
- 【转】首次敏捷项目开发实践
首次采用敏捷方式进行开发,我想把我们的做法与大家分享下,同时希望大家指出我们的不足和需要改进的地方,让我们的项目进行的更顺利,目前项目已过三分之一,客户比较满意,还算顺利. 项目简介:一个DMS小项目 ...
- 敏捷开发团队 项目分工_如何为您的软件开发项目建立敏捷团队
敏捷开发团队 项目分工 敏捷公司认为团队合作对于交付工作软件至关重要,而优秀的敏捷团队则关注"我们"而不是" I". 不幸的是,许多公司声称他们拥有敏捷团队,但 ...
- 项目的敏捷开发方法(转自MBAlib)
项目的敏捷开发方法 敏捷方法很多,包括 Scrum.极限编程.功能驱动开发以及统一过程(RUP)等多种法,这些方法本质实际上是一样的,敏捷开发小组主要的工作方式可以归纳为:作为一个整体工作: 按短迭代 ...
- AngryTask - 基于伪 scrum 的个人项目开发产品
关于 去年年末的时候同事分享了一下 scrum 工作模型, 以后公司按照这种方式来执行产品开发. 联想自己在阿里的两年的工作方式和大学课程讲述的项目协同敏捷开发的一些知识. 所以本文想就开发工作流模型 ...
- python项目开发实战网盘-《Python项目案例开发从入门到实战》PDF版百度网盘
「教程分享:Python项目开发从入门到实列」 本书例子具有实用性,20个不同类型的完整列子,600分钟高品质配套教学视频,完整的源码和教学课件,让你对枯燥的Python语言学习充满乐趣. 编辑推荐 ...
- 计算机科学常见工具书清单、项目开发清单
0. 开源精神与开源社区 <大教堂与集市>(The Cathedral & the Bazaar: Musings on Linux and Open Source by an A ...
- python项目开发实例-《Python项目案例开发从入门到实战》PDF版百度网盘
「教程分享:Python项目开发从入门到实列」 本书例子具有实用性,20个不同类型的完整列子,600分钟高品质配套教学视频,完整的源码和教学课件,让你对枯燥的Python语言学习充满乐趣. 编辑推荐 ...
- 项目开发流程及开发模式
项目开发阶段 整体阶段:需求分析.设计.编码.测试.维护. 需求阶段:通常定义系统的需求,明白系统的目标. 设计阶段:通常确定系统使用什么数据库,系统模块的划分,各个模块的功能. 编码阶段:用编程语言 ...
最新文章
- 三国时期,假如曹操是一名程序员,历史会发生什么?--文末送书
- sklearn基于make_scorer函数为Logistic模型构建自定义损失函数并可视化误差图(lambda selection)和系数图(trace plot)+代码实战
- Python中做接口自动化如何读取配置ini文件
- c语言 集中上机题目,C语言集中上机题目.doc
- 施乐悄悄修复影响某些打印机中的严重缺陷
- 使用java自带工具监控jvm运行状态
- selenium+webDriver环境搭建和学习基础(java环境)
- linux命令完整篇
- (20190401)IGS GNSS数据下载网址与下载说明
- 什么是MySQL集群?带你全面掌握MySQL集群原理
- 德阳计算机工程学校,德阳电子计算机工程学校2021年招生录取分数线
- 一文彻底搞懂方差、协方差、协方差矩阵
- ImageAssitant插件 — 一件提取网页图片
- (Python+OpenCV)图像平移
- 麦子学院彭亮python基础_麦子学院Python视频
- bilibili视频下载 (python)
- 【进阶数据挖掘技术】进阶数据挖掘技术介绍
- Mac电脑C语言开发的入门帖
- Android中JNI开发之常见错误
- Cortex M3 数据观察点与跟踪(DWT)