CSRF与Cookie
2015-12-01 13:13
399 查看
【背景知识】
Cookie分为2种:
临时cookie,没有expire-day,浏览器打开网页得到,关闭网页销毁。
本地cookie,有expire-day,浏览器打开网页得到,生命期结束后才销毁,不论网页是否关闭。
浏览器同时打开了A页面和B页面(二者不同域名),A页面中有B页面的资源C。
所以用户打开A页面时,会请求B页面中的资源C,发给B的数据包中就带有临时cookie,有些浏览器甚至包括本地cookie,比如FF2,FF3,Opera,Chrome,Android等。
【攻击原理】
1. 假设A也是恶意网站,A构造对资源C的请求时可以是一次恶意操作。
2. 用户访问B时已经得到了授权Cookie。
3. 用户访问A,就被发送了一次恶意操作。因为用户在访问B时携带了Cookie,被浏览器认为是正常授权操作,导致用户被执行了A的恶意操作。
这便是CSRF。
【注意】
其中Cookie作为凭证并不是必须的,那样CSRF执行起来更简单了,都不需要上述的第2步骤。
【防护】
1. Referer检测,如果Referer来自于A,B检测Referer不是B则判定为CSRF。
2. 加Token,用户先访问B得到一个隐藏在表单中的Token,用户执行操作时,会在在参数中携带Token。B检测Token有误则判定为CSRF。
Cookie分为2种:
临时cookie,没有expire-day,浏览器打开网页得到,关闭网页销毁。
本地cookie,有expire-day,浏览器打开网页得到,生命期结束后才销毁,不论网页是否关闭。
浏览器同时打开了A页面和B页面(二者不同域名),A页面中有B页面的资源C。
所以用户打开A页面时,会请求B页面中的资源C,发给B的数据包中就带有临时cookie,有些浏览器甚至包括本地cookie,比如FF2,FF3,Opera,Chrome,Android等。
【攻击原理】
1. 假设A也是恶意网站,A构造对资源C的请求时可以是一次恶意操作。
2. 用户访问B时已经得到了授权Cookie。
3. 用户访问A,就被发送了一次恶意操作。因为用户在访问B时携带了Cookie,被浏览器认为是正常授权操作,导致用户被执行了A的恶意操作。
这便是CSRF。
【注意】
其中Cookie作为凭证并不是必须的,那样CSRF执行起来更简单了,都不需要上述的第2步骤。
【防护】
1. Referer检测,如果Referer来自于A,B检测Referer不是B则判定为CSRF。
2. 加Token,用户先访问B得到一个隐藏在表单中的Token,用户执行操作时,会在在参数中携带Token。B检测Token有误则判定为CSRF。
相关文章推荐
- MPAndroidChart的K线图上添加均线
- MPAndroidChart的K线图上添加均线
- Android-Media and Camera
- 什么是P问题,NP问题和NPC问题?
- 可扩展机器学习——Spark分布式处理
- oracle和tomcat的开机自启动
- [Javascript] Prototype 原型
- 动态调整(springMVC+slf4j)log等级(DEBUG/INFO/WARN/ERROR)
- CentOS下编译安装gcc 4.9.0
- Ksoap封装代码
- 搜索引擎优化指南教程
- Android 开发知识收藏夹
- asp.net Repeater拖拽实现排序并同步排序字段到数据库中
- 字符图
- 一种计算大数阶乘的算法
- java ---运算符
- JQuery - 提交表单
- java 调用 wsdl形式的webservice
- tomcat优化(二)tomcat集群之Nginx+Tomcat+Memcached集群
- 在Mac上配置Apache+PHP环境