csrf简介

CSRF(Cross-site request forgery),也被称为:one click attack/session riding,中文名称:跨站请求伪造,缩写为:CSRF/XSRF。

一般来说,攻击者通过伪造用户的浏览器的请求,向访问一个用户自己曾经认证访问过的网站发送出去,使目标网站接收并误以为是用户的真实操作而去执行命令。常用于盗取账号、转账、发送虚假消息等。攻击者利用网站对请求的验证漏洞而实现这样的攻击行为,网站能够确认请求来源于用户的浏览器,却不能验证请求是否源于用户的真实意愿下的操作行为。

csrf一般流程

要完成一次CSRF攻击,受害者必须依次完成两个步骤:

1、登录受信任网站A,并在本地生成Cookie。

2、在不登出A的情况下,访问危险网站B。

(黑色箭头表示用户正常的访问网站,红色箭头表示黑客的攻击流程)

看到这里,也许你会觉得csrf攻击形成的条件十分苛刻。是的,确实如此,但你不能保证以下情况不会发生:

1.你不能保证你登录了一个网站后,不再打开一个web页面并访问另外的网站。
2.你不能保证你关闭浏览器了后,你本地的Cookie立刻过期,你上次的会话已经结束。
3.上图中所谓的攻击网站,可能是一个存在其他漏洞的可信任的经常被人访问的网站。

csrf典型案例

2007年 Gmail csrf,邮箱中的邮件被转载,导致验证信息泄露

2015年 新浪微博出现的csrf漏洞可以不经过用户同意点击链接获得关注,漏洞产生在点击分享榜单的时候,会先发送一个请求关注“微博电影板”,不需要经过用户同意

csrf的危害

修改账户信息

利用管理员账号,上传木马文件

传播蠕虫病毒

和其他攻击手段配合,实现攻击,如XSS

csrf的防御方法

目前防御 CSRF 攻击主要有三种策略:

1、验证 HTTP Referer 字段

2、在请求地址中添加 token 并验证

3、在 HTTP 头中自定义属性并验证

(1)验证 HTTP Referer 字段

根据 HTTP 协议,在 HTTP 头中有一个字段叫 Referer,它记录了该 HTTP 请求的来源地址。在通常情况下,访问一个安全受限页面的请求来自于同一个网站。而如果黑客要对银行网站实施 CSRF 攻击,他只能在他自己的网站构造请求,当用户通过黑客的网站发送请求到银行时,该请求的 Referer 是指向黑客自己的网站。

因此,要防御 CSRF 攻击,银行网站只需要对于每一个转账请求验证其 Referer 值,如果是以 bank.example 开头的域名,则说明该请求是来自银行网站自己的请求,是合法的。如果 Referer 是其他网站的话,则有可能是黑客的 CSRF 攻击,拒绝该请求。

这种方法的显而易见的好处就是简单易行,网站的普通开发人员不需要操心 CSRF 的漏洞,只需要在最后给所有安全敏感的请求统一增加一个拦截器来检查 Referer 的值就可以。特别是对于当前现有的系统,不需要改变当前系统的任何已有代码和逻辑,没有风险,非常便捷。

(2)在请求地址中添加 token 并验证

CSRF 攻击之所以能够成功,是因为黑客可以完全伪造用户的请求,该请求中所有的用户验证信息都是存在于 cookie 中,因此黑客可以在不知道这些验证信息的情况下直接利用用户自己的 cookie 来通过安全验证。

要抵御 CSRF,关键在于在请求中放入黑客所不能伪造的信息,并且该信息不存在于 cookie 之中。可以在 HTTP 请求中以参数的形式加入一个随机产生的 token,并在服务器端建立一个拦截器来验证这个 token,如果请求中没有 token 或者 token 内容不正确,则认为可能是 CSRF 攻击而拒绝该请求。

(3)在 HTTP 头中自定义属性并验证

这种方法也是使用 token 并进行验证,和上一种方法不同的是,这里并不是把 token 以参数的形式置于 HTTP 请求之中,而是把它放到 HTTP 头中自定义的属性里。通过 XMLHttpRequest 这个类,可以一次性给所有该类请求加上 csrftoken 这个 HTTP 头属性,并把 token 值放入其中。

这样解决了上种方法在请求中加入 token 的不便,同时,通过 XMLHttpRequest 请求的地址不会被记录到浏览器的地址栏,也不用担心 token 会透过 Referer 泄露到其他网站中去。

CSRF——跨站请求伪造攻击相关推荐

  1. XSS跨站脚本攻击与CSRF跨站请求伪造攻击的学习总结。

    之前就了解过这方面的知识,但是没有系统地总结.今天在这总结一下,也让自己在接下来的面试有个清晰的概念. XSS跨站脚本攻击: xss 跨站脚本攻击(Cross Site Scripting),为了不和 ...

  2. XSS跨站脚本攻击与CSRF跨站请求伪造攻击的学习总结

    转载:https://blog.csdn.net/baidu_24024601/article/details/51957270 XSS跨站脚本攻击与CSRF跨站请求伪造攻击的学习总结. <di ...

  3. CSRF 跨站请求伪造攻击

    1.概念 全称是CSRF 跨站请求伪造攻击,攻击者利用用户已登陆的账号,诱导用户访问已构造好的恶意链接或页面,在用户不之情的情况下,做一些违反用户本意的一些违法操作. 同源策略:协议相同,域名相同,端 ...

  4. 【安全牛学习笔记】CSRF跨站请求伪造攻击漏洞的原理及解决办法

    CSRF跨站请求伪造攻击漏洞的原理及解决办法 CSRF,夸张请求伪造漏洞 漏洞的原理及修复方法 1.常见的触发场景 2.漏洞原理:浏览器同源策略 3.DEMO 4.漏洞危害 5.如何避免&修复 ...

  5. CSRF跨站请求伪造攻击

    CSRF(Cross-site request forgery)跨站请求伪造 CSRF 背景与介绍 CSRF(Cross Site Request Forgery, 跨站域请求伪造)是一种网络的攻击方 ...

  6. 【网络安全工程师面试合集】—CSRF跨站请求伪造 攻击及防御

    目录 4.3. CSRF 4.3.1. 简介 4.3.2. 分类 4.3.2.1. 资源包含 4.3.2.2. 基于表单 4.3.2.3. XMLHttpRequest 4.3.3. 防御

  7. 浏览器安全之CSRF跨站请求伪造

    基本概念 跨站请求伪造(Cross-site request forgery)简称CSRF,尽管与跨站脚本漏洞名称相近,但它与跨站脚本漏洞不同.XSS利用站点内的信任用户,而CSRF则通过伪装来自受信 ...

  8. Django之CSRF跨站请求伪造(老掉牙的钓鱼网站模拟)

    首先这是一个测试的代码 请先在setting页面进行下面操作 注释完成后,开始模拟钓鱼网站的跨站请求伪造操作: 前端代码: <!DOCTYPE html> <html lang=&q ...

  9. CSRF(跨站请求伪造攻击)详解以及防护之道

    CSRF(Cross Site Request Forgery, 跨站域请求伪造)是一种网络的攻击方式,该攻击可以在受害者毫不知情的情况下以受害者名义伪造请求发送给受攻击站点,从而在并未授权的情况下执 ...

最新文章

  1. webgl值得重视的基础构建
  2. Nginx服务测试时的一些配置:wireshark、常用搜索URL格式、关闭防火墙、siege
  3. java创建集合有的不用泛型_为什么在Java泛型右手边的集合类型没有任何影响?...
  4. java初学课程_作为java新手应该学习什么课程
  5. 怎么样开会才有效果?
  6. C++起航篇——bool类型,输入输出,命名空间
  7. 祝贺!王春雨入职一个月晋升副教授
  8. simulink 得到任意想要的 PWM 波形
  9. php 常用时间处理函数,PHP date函数常用时间处理方法_PHP
  10. 授权普通非DBA用户可以有权限查看执行计划的方法
  11. 公式编辑器里面添加空格
  12. 立即寻址,直接寻址,间接寻址
  13. oracle dmp和sql文件区别,数据库dbf与dmp文件
  14. 嵌入式通过序列号加密总结及flash…
  15. windows2008 R2安装LoadRunner 11提示WindowsInstaller存储空间不足解决方法
  16. 两种方式登录QQ空间提取SKEYamp;P_skey源码
  17. 卡巴斯基杀毒软件被曝出用户上网痕迹泄露漏洞
  18. 两物体的相对速度公式_《百答相对论》连载(二十一)质疑狭义相对论速度的叠加公式...
  19. springboot 获取访问者的ip地址、访问设备信息、城市地址信息
  20. SQL查询最近几年、几月、几天的数据

热门文章

  1. Install DBeaver in Mac
  2. Halcon算子—create_shape_model参数解析及优化
  3. CC2640 蓝牙动态切换广播数据
  4. 微信小程序的开发:通过微信小程序看前端
  5. python如何群控手机_python调用adb脚本来实现群控安卓手机初探
  6. Linux 学习网站汇总
  7. vue-orgchart拓扑图
  8. 向Excel说再见,神级编辑器统一表格与Python
  9. 统计自然语言处理基础-第四章 基于语料库的工作(笔记)
  10. DataQL The content of elements must consist of well-formed character data or markup. 问题