《软件工作之美》材料地址:https://time.geekbang.org/column/article/95818
安全问题本质是技术风险
软件中的安全问题来源主要有三类
-
恶意输入 如SQL注入、XSS跨站脚本攻击;对策是对用户输入的数据,做严格的校验,格式化。
-
假冒身份 对于用户身份的校验比较弱;对策是身份验证,甚至双重验证。
-
数据泄露 敏感数据存储的地方有风险,比如日志中、明文放在数据库中;对策是提前做好预防措施,对敏感数据进行加密。
如何预防
最好的方式就是在整个生命周期中都做到重视安全问题
-
需求阶段
需求阶段就提出了安全性的需求,设计、实现和测试时自然不会遗漏掉安全方面的内容 -
设计阶段
最重要的事就是要把安全加入到设计目标,架构设计方案的评审时,也需要增加安全方面的评审设计原则可参考
(1) 攻击面最小化 (比如数据库不能开放给外网访问,单点登录等)
(2) 权限最小化(就是对于系统的用户、文件访问、进程运行等,都只给予其能拥有的最小权限,这样可以保证一个应用程序或者网站被攻击、破解,能将损害降到最低)。
(3)纵深防御(从不同的维度去实施安全保护措施,站在系统交易的整体去考虑安全性) -
开发阶段
要有良好的编码习惯和安全意识
(1)编码规范中加入安全相关内容
(2)要有代码审查
(3)增加安全相关的自动化测试 -
测试阶段
借助安全测试工具,增加对安全性方面的测试 -
上线维护
上线部署时,不部署源代码,只对编译后程序部署;删除 Debug文件;对服务器进行安全设置,比如限制端口,限制文件系统访问权限等
如果真的出现安全问题怎么办?
- 应急流程
- 查找漏洞
- 总结经验
我的留言
据我所知,安全测试也分白盒测试和黑盒测试两种,黑盒测试可以用fortify或appscan 来查,白盒测试可以通过code review来完成。在代码方面,写许多规范,即使写得很全,如果用手工测试,也很难确定开发人员是否真的按规范来写代码。所以,一般使用code review的工具来做。老师有没有好的安全代码检查的工具推荐?
老师回复: 我印象中Fortify也是可以做静态代码检查的。
除了Fortify和AppScan,我知道的还有Veracode、Checkmarx和CodeSecure。
但我没有实际用过,无法推荐哪个更合适。