最近一直在忙着易信公众平台的开发工作,一直没能抽出空来总结一下。周末终于有了一些空闲,就把这本书的笔记写了一下。
整本书四篇十八章,包括世界观安全、客户端脚本安全、服务端应用安全以及互联网公司安全运营四大部分。
一、世界观安全
- 黑帽子和白帽子这两个概念,前者指的是利用安全技术进行破坏的哪一类黑客,后者则指的是工作在反黑客领域的安全技术专家。
- 安全问题的本质是信任的问题。并且安全是一个持续的过程,并不存在所谓的银弹。
- 安全三要素:机密性、完整性、可用性
- 一个安全评估的过程可以分为4个阶段:资产等级划分、威胁分析、风险分析、确认解决方案。其中威胁分析的一种建模方法是微软提出的STRIDE模型;风险分析则是DREAD模型,Risk = Probability * Damage Potenial。
- 白帽子并发有以下几个原则:Secure By Default原则;纵深防御原则(Defense in Depth);数据与代码分离原则;不可预测性原则。
二、客户端脚本安全
浏览器安全
同源策略(Same Origin Policy)防止了跨域读写某些资源。 浏览器提供了浏览器沙箱,使进程在一个相对独立的空间运行,能在一定程度上保护浏览器安全。
跨站脚本攻击
跨站脚本攻击主要是注入到网站内容中,授权用户访问内容时执行一段恶意代码,从而获取用户的私密信息或者进行破坏。通常叫做XSS攻击,是针对动态网站的攻击。
跨站点请求伪造
CSRF,指的是伪造出一个请求,诱使授权用户访问,以授权用户的身份去执行请求,从而达到对授权用户信息的读取、攻击等。
点击劫持
Click jacking,是指将恶意代码隐藏在看似无害的内容后者按钮之下,诱导用户访问的一种手段。
Html5安全
- HTML引入了很多新的标签,一些XSS Filter可能并没有覆盖这些新增的标签和功能。比如video、audio、iframe的sandbox。此外使用canvas可以在浏览器环境中实现对验证码的在线破解,大大降低了攻击的门槛。
- 跨域请求的Orgin Header和Access-Control-Allow-Origin的设置。postMessage的引入,使XSS PayLoad变得更加的灵活。
三、服务端安全
注入攻击
注入攻击是一种普遍的利用数据库SQL语句进行攻击的方式。使用用户提交的数据拼接数据库操作字符串,如果这些字符串中包含一些特殊字符就有可能查询到数据库关键信息。
文件上传漏洞
通常的一个问题就是对上传文件的格式控制不严格,并且文件存放的路径可以通过Web路径直接进行访问;另一种方式,就是文件路径是通过表单的方式提交的,可以使用一个特殊字符“\0”截断文件路径,从而实现对脚本文件的上传。
认证与会话管理
用户的登录状态一般是进过认证之后保存在服务端的,与服务器端的一系列交互即会话。一般对会话的管理。。。
访问控制
对于系统中不同的用户具有不同的权限,对这些权限进行控制即访问控制。如果访问控制不严就容易形成漏洞被利用。
加密算法与随机数
系统中对数据进行加密使用的加密算法和随机数生成算法的安全性和健壮性都直接关系到整个系统的安全性。对称加密、非对称加密的密钥的安全性,随机数算法的随机性都是要考虑的问题。
Web框架安全
一些经典的使用率较高的Web框架如:Spring、Struts、Hibernate本身会在整个执行体系中有一些安全漏洞。比如前一阵的Struts2的命令执行漏洞,就是因为在OGNL中可以执行JAVA静态方法造成的。
应用层拒绝服务攻击
DOS,这种攻击是以耗尽服务器资源为目的攻击。DDOS分布式 拒绝服务攻击,是DOS的加强版。防范拒绝服务攻击要从访问入口处进行,限制来自统一IP的访问频率或者就是最大化提升系统的负载能力。
PHP安全和Web服务器配置安全
针对与PHP本身的一些API的特点,可以在代码层面进行安全控制。比如,对数据库SQL相关的操作,要对用户输入的参数进行mysql_real_esape等。此外,对于Web Server如Apache http server,对其magic_quote,GLOBAL等配置要权衡关闭和开启是否会对系统的安全造成威胁。
四、互联网公司安全运营
除了在技术层面对安全进行保证外,还可以在业务层面对安全进行最大化的保障。此外,微软提出的 SDL安全开发流程,运用在项目开发过程中能够很好地保障系统的安全。而运营方面的安全保障则能够进一步保证整个系统的安全性。