第一章
- 安全三要素
- 机密性、完整性、可用性
第二章 浏览器安全
- 限制了来自不同源的document或者脚本对当前document读取或者设置某些属性
- 恶意网址拦截主要靠黑名单
第三章 跨站脚本攻击(XSS)
- 全称是cross site script,为了和css区分开
根据效果不同可以分为三类
反射型XSS
把用户输入数据反射到浏览器,比如输入文本中有如下内容1
"<script>alert()</script>
这样的内容到达浏览器后脚本就会被执行
- 存储型XSS
输入数据存储在服务器端,效果持久,比如一篇博客,博客内容中有攻击脚本,那每个访问这篇博客的用户都将被攻击 - DOM Based XSS
通过修改页面DOM来实现执行攻击脚本
- 常见的攻击有劫持cookie
- 防御方法主要有:
- 对输出到html中的变量进行htmlEncode,就是对特殊符号比如‘<、&、>’等进行转义。
- JavaScript代码则进行JavaScriptEncode,变量包括在引号内,防御哪些攻击代码被直接执行。
第四章 跨站请求伪造
- 浏览器的session cookie在浏览器生命周期内都是有效的,所以新开一个页面,也是可以发送cookie的。所以常见的攻击模式就是伪造一个页面,诱使用户在点开想要攻击的页面后再点击该页面,该页面中伪造一个攻击请求,因为还在同一个浏览器进程中,所以session cookie会被发送,如果被攻击站点的cookie是被用来认证的话,那攻击就成功了。但是目前主流浏览器会拦截第三方cookie,即那些会保持在本地的cookie。
- 防御手段主要有:
- 验证码。这样伪造的请求就不能自动发送了,必须通过交互的方式填验证码才能发送
- Referer check。因为页面和页面之间的跳转是有一定的逻辑关系的,所以每次处理请求时检测Referer可以过滤掉很多异常请求。但是由于隐私或者其他情况,很多时候没法取得Referer,所以这个方法可用性不是很强。
- Token。攻击之所以可以成功,是因为攻击者很容易从URL中猜测出如何去构造一个请求。如果我把请求参数进行加密,那攻击者就没法准确的构造出正确的请求了,就没法攻击了。常用的做法是把token当作一个字段或者放在请求头中一起发送,因为攻击则没法构造出准确的token值,就没法发起有效的攻击了。token要注意保密性和随机性。
第五章 点击劫持
这是一种视觉欺骗,攻击者使用个透明的、不可见的iframe覆盖在网页上,然后诱使用户在网页上进行点击操作,从而从而在用户不知情的情况下触发iframe上的一些操作。通过调整iframe的位置,可以让iframe上的某些按钮或者链接覆盖在用户会点击的位置,从而实现攻击。
第六章 HTML5安全
- 由于HTML5有很多新标签,以前的防护规则可能会没有考虑到这些新标签,所以有可能会发生新的xss攻击
- canvas可以绘制图片,通过这一功能,可以在canvas上通过算法自动破解验证码
- 跨域Access-Control-Allow-Origin:*存在危险
- 本地存储将给攻击者带来便利,实现跨越页面攻击
- postMessage可以实现页面间通信,也给攻击者带来便利
第七章 注入攻击
注入攻击的本质是把用户输入的数据当作代码来执行,违背“数据和代码相隔离原则”。这种攻击必须满足连个条件
1:用户能够控制输入。2:原本程序要执行的代码拼接了用户输入的数据。
- SQL注入
就是针对一些查询请求,构造恶意数据,比如添加一个引号,结束原来的sql查询语句,并在后面添加攻击查询语句- 预防这种简单的SQL注入就是使用预编译语句,避免直接拼接用户输入为sql语句。
- 进行数据过滤,比如检查数据类型
- 最小权限原则,避免web应用直接使用root,dbowner等高权限账户直接连接数据库
- CRLF注入
由于CRLF常用作不同语义之间的分隔符,因此注入CRLF字符,就会改变原有的语义,比如日志注入,HTTP头注入
第八章 文件上传漏洞
- 常见的安全问题:
- 上传文件是Web脚本语言,服务器的Web容器解释并执行了用户上传的脚本,导致代码执行。
- 上传文件是钓鱼图片或者包含了脚本的图片,在某些低版本的浏览器会被作为脚本执行。
- 预防:
- 文件上传的目录设置为不可执行
- 判断文件类型,使用白名单的方式
- 使用随机的方式改写文件名和路径
- 文件服务器在不同的域名,由于同源策略,使得很多xss攻击失效
第九章 认证与会话管理
- session在服务端要设置过期时间,到期强制销毁,防止被攻击者获取了之后就永久有效了。
- 单点登录,讲风险点集中于一点
第十章 访问控制
- OAuth是用来解决跨应用授权的问题,比如微博登录等等授权问题。无需提供用户名和密码。
第十一章 加密算法与随机数
- 不使用ECB模式
- 不使用流密码
- 使用HMAC-SHA1代替MD5
- salts和IV要随机产生
- 不要自己实现加密算法,尽量使用安全专家已经实现好的库
第十二章 Web框架安全
- 框架是处于基础和底层的位置,所以在这个地方处理安全问题有很大的便利性,可以避免在业务代码中去重复处理很多问题,在业务代码中处理效率低并且可靠性低。
- MVC框架安全,现在流行MVC架构,所以可以在框架层面解决很多安全问题。用户提交的数据都会经过View层,所以可以在View层统一处理很多安全问题,View层一般都会有模板引擎,可以在这个地方解决XSS攻击。在Model层就可以解决SQL注入等问题。
- 框架自身的代码也需注意安全问题。
第十三章 应用层拒绝服务攻击
- DDOS攻击又称分布式拒绝服务,利用合理请求造成服务过载,导致服务不可用。
- CC攻击,指的是通过对一些消耗资源较大的页面不断发起请求,造成服务器资源耗尽。因为这是一种消耗资源的攻击,所以防御方法就是优化应用,减少资源的消耗。防御方法主要有对使用很频繁的资源放到memcache中,命中了memcache后消耗服务器资源就很很少了、上CDN分流、对每一个客户端做访问频次限制。
- 验证码防御,但是目前自动识别验证码的技术已经非常成熟了,所以防御效果并不好。
- 资源耗尽攻击:发送畸形的HTTP请求,造成服务器以为请求还没结束,故一直占用资源。
- 正则表达式写的不好,也会造成正则表达式引擎资源耗尽,造成服务器性能下降,服务不可用。
- 总之就是得清洗流量,准确识别出攻击对象,拒绝攻击对象的访问。
第十四章 PHP安全
- 文件包含漏洞,php的include函数不会在意被包含的文件是什么类型,都将作为php代码执行,所以如果文件路径是动态变量的方式传入的,那就很容易被攻击,或者被攻击者读取到敏感文件从而获取敏感信息。
- 变量覆盖,php4.2.0之前版本,默认变量可以来自不同地方,比如页面表达和cookie,就非常容易被攻击者覆盖原来程序内的全局变量,实现攻击。
- 建议配置
1
2
3
4
5
6register_globals = off;
open_basedir = /home/web/html/ 限定只能操作指定目录下的文件
allow_url_include = off
display_errors = off
log_errors = off
session.cookie_httponly = 1
第十五章 Web Server 配置安全
- Apache安全。最小权限原则,尽可能减少不必要的Module,对于要使用的Module,要检查其对应版本是否存在已知的安全漏洞。为Apache单独创建一个用户来运行,不能用root/admin身份。保护好log。
- 及时更新补丁
- Tomcat 删掉后台,防止密码被盗取从而控制了整个server
第十六章 互联网业务安全
- 注重业务逻辑安全,不能在业务逻辑上发生安全问题
- 优秀的安全方案,必须还要有良好的用户体验和优良的性能
- 及时拦截、清除产品运行中产生的各种垃圾信息、账号等隐患
第十七章 安全开发流程
- 开发要进行安全培训、开发前确认安全要求、开发中的质量/bug控制、安全和隐私风险评估、设计时就要考虑安全和隐私问题、减少攻击面、威胁建模、使用指定的安全工具、启用不安全的函数、静态动态分析、事件响应机制、最终安全评估、发布存档
- 使用相应工具进行代码安全审计和安全测试
第十八章 安全运营
- 建立漏洞修补流程、安全监控、入侵检测、紧急响应流程
总结
5月11号到8月4号,历时85天终于把这本书看完了,收获不少。