CSRF(Cross Site Request Forgery)跨站点请求伪造。

CSRF的本质是当重要操作的参数都能被攻击者预测到,才能成功伪造请求。

一、场景演示

下图是一个伪造请求的场景,按顺序来看;

1、2是正常登陆并产生Cookie,3、4是在登陆后访问骇客的网站并发请求,5是服务器执行骇客发出的请求。

这个场景的关键就是带上Cookie伪造请求。

1)浏览器中的Cookie

浏览器有“Session Cookie”(临时Cookie)和“Third-party Cookie”(本地Cookie);

前者浏览器关闭后就失效了,后者指定了Expire时间,只有超过了时间才会失效。

默认会拦截“Third-party Cookie”的有IE6、IE7、IE8、Safari;

不会拦截的有Firefox、Opera、Chrome等,我就验证了Firefox、Chrome、以及IE8。

2)验证浏览器的支持

设计两个域名“www.normal.net”(正常的网站)和“www.csrf.net”(伪造的网站)

1. 访问“www.normal.net/cookie.php”页面,在cookie.php中设置Cookie,用PHP代码实现。

<?phpsetcookie("cookie1",'session');setcookie("cookie2",'third',time()+3600*24);

2. 接着访问“www.csrf.net/csrf.html”,在csrf页面中添加了一个iframe,通过iframe访问normal网站。

<iframesrc="http://www.normal.net"></iframe>

3. 查看用iframe访问normal网站中的请求头信息,Cookie只有IE8会拦截,接下来会说明一种绕过拦截的方法。

Firefox

Chrome

IE8

3)P3P头

P3P头(Platform for Privacy Preferences Project)隐私偏好项目平台,通过加这个头,可以让IE不拦截第三方Cookie。

不过IE11以及Microsoft Edge将不在支持P3P头。

1. 还是用PHP来实现,与上面的不同之处用加红区分。

<?phpheader("P3P: CP=CURa ADMa DEVa PSAo PSDo OUR BUS UNI PUR INT DEM STA PRE COM NAV OTC NOI DSP COR");setcookie("cookie1",'session');setcookie("cookie2",'third',time()+3600*24);

2. 请求“www.normal.net/cookie.php”页面,响应头中有下面一句话。

3. 在iframe中访问normal网站的请求头中出现了两个Cookie。

4)GET或POST请求

HTML中能够设置src/href的标签都可以发起一个GET请求,例如上面的攻击通过iframe的src属性发起的。

<linkhref=""/>
<imgsrc=""/>
<metahttp-equiv="refresh"content="0; url="/><!--HTML重定向-->
<scriptsrc=""></script>
<ahref=""></a>
<videosrc=""></video>
<audiosrc=""></audio>...

攻击者还可以通过伪造表单来执行POST请求,例如在一张页面中布置好输入框、选择框等标签,通过JavaScript自动提交。

二、CSRF的危害

1)篡改目标网站上的用户数据

2)盗取用户隐私数据

3)作为其他攻击的辅助手法

4)传播CSRF蠕虫

例如某个社交网站爆出的漏洞,让某个用户查看恶意页面后,给他所有好友发送短信,短信中又包含了这个恶意页面;

好友点击的话,又会给他的好友发送短信,这样就开始了传播,受感染的人也将越来越多。

CSRF蠕虫的原理和XSS蠕虫基本类似,但也略有不同:

1. CSRF的攻击代码存在于攻击者页面中,目标网站传播的内容都包含攻击者页面的URL。还有前提,目标用户登录了目标网站,之后的传播需要带上目标用户的“Session Cookie”。

2. XSS的攻击代码存在于目标页面中,即使是Script从攻击域上引进来的,对JavaScript上下文来说,也属于目标网站。

三、CSRF的防御

1)验证码

CSRF的过程,往往是在用户不知情的请求下发起了网络请求;

而加了验证码,就让用户必须与应用进行交互,才能完成最终请求,能够遏制CSRF的攻击。

但是加了验证码后,在用户体验上面会大打折扣,所以要因地制宜。

2)Referer Check

Referer Check常用于“防止图片盗链”,同理,也可以检查请求是否来自合法的“源”。

但Referer Check有缺陷,服务器并非任何时候都能取到Referer,例如HTTPS跳转到HTTP,就不会发送。

3)Anti CSRF Token

在每个请求中增加一个Token参数,这个Token是个随机数,为用户和服务器共同持有,不能被第三者知晓。

Token可放在用户的Session或Cookie中,为了使用方便,还可设置一个生命周期

在提交请求的时候,服务器只需验证表单中的Token和Session(或Cookie)中的Token是否一致即可遏制CSRF攻击。

但在XSS的攻击下,Token会无效,因为XSS可以模拟客户端浏览器执行任意操作,那就可以读取出Token,再构造一个合法的请求,这个过程称为XSRF

demo代码下载:

http://download.csdn.net/download/loneleaf1/9746890

参考资料:

zenphoto csrf 攻陷

用P3P header解决iframe跨域访问cookie[各种语言]

本文转自 咖啡机(K.F.J) 博客园博客,原文链接:http://www.cnblogs.com/strick/p/6364097.html,如需转载请自行联系原作者

谨慎能捕千秋蝉(二)——CSRF相关推荐

  1. 在oracle中要谨慎使用when others then(二)

    1.在oracle中when others then会吃掉所有的exception,一般不要使用,否则会掩盖软件的错误提示. 2.应使用精准异常捕获. 如果只是判断查不到数据时的处理,应该用when ...

  2. 前端页面开发浅谈:PC 端设计如何“完美”迁移到移动端?

    文章目录 前言 一.我真的需要一个登录页面吗? 1.1.用户眼中不确定持续使用的系统 1.2.免登陆实现的功能可以满足用户需求 二.举个移动端登陆例子 三.前端学习不是造火箭 四.前端的布局设计 五. ...

  3. 男子用棒打狗却失手打死了自己的2岁亲生女儿,法院判了

    人在家中坐,祸从天上来.男子本来是为了赶狗,却不料失手打到女儿,导致女儿死亡,酿成一起人间悲剧. 最近,这起过失致人死亡的案件在江西赣州会昌法院判决并审理. 案件发生在2017年11月7日20时许,被 ...

  4. 通过优雅的方式强制旋转屏幕

    谨慎能捕千秋蝉,小心驶得万年船                         --<庄子语录> 前言 方向旋转在日常App上基本都会用到,用的时候可能会因为赶工期而以实现功能为主,认真思 ...

  5. 跨站请求伪造(CSRF)+ 跨站脚本攻击(XSS)

    一.CSRF 跨站请求伪造(英语:Cross-site request forgery),也被称为 one-click attack 或者 session riding,通常缩写为 CSRF 或者 X ...

  6. 浅谈CSRF攻击方式

    一.CSRF是什么? CSRF(Cross-site request forgery),中文名称:跨站请求伪造,也被称为:one click attack/session riding,缩写为:CSR ...

  7. web安全漏洞之CSRF

    一.CSRF(跨站请求攻击)攻击的原理: 1.攻击原理: 网站使用cookie来存放用户的登录凭证 cookie会在同源的http请求中自动携带 2.基本攻击过程: 用户登录了受信任网站A,并在本地生 ...

  8. 渗透知识-CSRF攻击

    CSRF攻击原理及测试方法 CSRF(Cross Site Request Forgery, 跨站域请求伪造)是一种网络的攻击方式,该攻击可以在受害者毫不知情的情况下以受害者名义伪造请求发送给受攻击站 ...

  9. CSRF 1 (转)

    一.CSRF是什么? CSRF(Cross-site request forgery),中文名称:跨站请求伪造,也被称为:one click attack/session riding,缩写为:CSR ...

最新文章

  1. 例题3-6 环状序列(Circular Sequence, ACM/ICPC Seoul 2004, UVa1584)
  2. 2021年古蔺高考成绩查询,古蔺中学2021录取分数线
  3. python 二叉树中所有距离为k的节点_leetcode 二叉树中所有距离为 K 的结点
  4. 一个python程序员需要掌握的知识-Python基础知识,初学者的你掌握了吗?
  5. JVM实战与原理---内存区域分配
  6. 计算机右键管理显示没权限,解决右键 选择打开方式提示没有权限
  7. 纯ASP结合VML生成完美图-柱图
  8. 100家店干翻17000家药店!刘强东最恐惧的对手来了!
  9. Mybaties入门介绍
  10. XMPP核心协议客户端
  11. WebReBuild年会流水记
  12. 微信小程序icon图标引入
  13. 《麻省理工公开课:线性代数》中文笔记来了!
  14. 几个小图像处理工具网址
  15. Wex5打包报错的解决办法
  16. matlab 数组横向纵向拼接
  17. Nim游戏 —— 巴什博弈
  18. Wireshark, Sniffer and Omnipeek 三款网络分析工具的比较
  19. stata抓取html,(5)详解 stata 爬虫抓取网页上的数据 part 1
  20. 解决端口被占用的方法(查看端口和关闭端口)

热门文章

  1. 微软宣布在Azure API管理中预览OpenAPI规范V3
  2. 谁是第三者之- Activity、Window、View
  3. 源码包安装和快捷管理nginx,自定义命令管理服务
  4. DNS部署(四)之lvs+keepalived+bind架构高可用负载均衡DNS系统
  5. 华为手机 开启LOGCAT
  6. AOS V1.0 发布,JavaEE 应用基础平台
  7. 百度地图API(二)
  8. MySQL字符串函数substring:字符串截取
  9. python类装饰器应用_python之描述符应用与类的装饰器
  10. 5G NR — gNB