零、序言
安全是应用的生命
一、目标
首先,思考一个问题,怎样才是一个安全合格的Web应用?
第一条,“黑”不进来;
第二条,易于查找和发现安全问题,易于配置和审计,即安全监控,入侵检测;
第三条,不能牺牲一个好应用的基本特性:稳定性、易维护性、可扩展性、高性能、良好的用户体验。
二、生命周期
应用设计之初应该设计安全需求,设计合理的安全策略和解决方案;开发中,按照安全开发流程和规范进行,开发后进行代码安全审计,然后做安全测试,上线后安全监控入侵检测漏洞修复运维等。
总结起来,安全设计贯穿软件生命周期全过程。
三、认知与原则
* 信任关系的划分是安全设计的基础
安全问题的本质是信任问题。
* 访问控制系统是安全设计的核心
垂直权限一般是基于角色菜单请求路径的;水平权限控制的一般要求是将所操作的数据与用户联系起来;同源策略
* 数据与代码分离是安全设计的重要原则
代码与数据分离原则的本质还是体现了安全问题是信任问题这一思想。代码是否应该信任数据,或者说代码应该信任怎样的数据,是这个原则的本质。 在应用中,比较好的例子是json、XSLT,这些方法都比较好的做到了数据与代码分离,所以在开发中多使用这些比较好的方法,无形中就提高了安全性。
* 最小权限原则
“default denied”。 推荐白名单,黑名单很可能漏。
* 合理利用不可预测性