什么是CSRF跨站点请求伪造(Cross Site Request Forgery)

CSRF攻击原理

1、用户浏览并登录信任网站A
2、A验证通过,在用户处产生A的cookie
3、用户在没有登出A网站的情况下,访问危险网站B
4、这时候B(危险的)要求访问A(安全的),发出一个请求
5、这时候,浏览器会携带(2)的cookie访问A
6、虽然A不知道这个请求是来自B发出的还是用户在浏览器发出的,但是,由于请求携带了cookie,所以A认为这是一个正常的请求

CSRF防御策略

方法一、Token 验证:(用的最多)
(1)服务器发送给客户端一个token(注意,这个token是不存在cookie中的);
(2)客户端提交的表单中带着这个token。
(3)如果这个 token 不合法,那么服务器拒绝这个请求。
在Django中,服务器在页面返回{% csrf_token %},每次表单提交都必须携带

方法二、隐藏令牌:
把 token 隐藏在 http 的 head头中。
方法二和方法一有点像,本质上没有太大区别,只是使用方式上有区别。

方法三、Referer 验证:
Referer 指的是页面请求来源。意思是,只接受本站的请求,服务器才做响应;如果不是,就拦截。

根据 HTTP 协议,在 HTTP 头中有一个字段叫 Referer,它记录了该 HTTP 请求的来源地址。在通常情况下,访问一个安全受限页面的请求来自于同一个网站,比如需要访问 http://bank.example/withdraw?account=bob&amount=1000000&for=Mallory,用户必须先登陆 bank.example,然后通过点击页面上的按钮来触发转账事件。这时,该转帐请求的 Referer 值就会是转账按钮所在的页面的 URL,通常是以 bank.example 域名开头的地址。而如果黑客要对银行网站实施 CSRF 攻击,他只能在他自己的网站构造请求,当用户通过黑客的网站发送请求到银行时,该请求的 Referer 是指向黑客自己的网站。因此,要防御 CSRF 攻击,银行网站只需要对于每一个转账请求验证其 Referer 值,如果是以 bank.example 开头的域名,则说明该请求是来自银行网站自己的请求,是合法的。如果 Referer 是其他网站的话,则有可能是黑客的 CSRF 攻击,拒绝该请求。

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

然而,这种方法并非万无一失。Referer 的值是由浏览器提供的,虽然 HTTP 协议上有明确的要求,但是每个浏览器对于 Referer 的具体实现可能有差别,并不能保证浏览器自身没有安全漏洞。使用验证 Referer 值的方法,就是把安全性都依赖于第三方(即浏览器)来保障,从理论上来讲,这样并不安全。事实上,对于某些浏览器,比如 IE6 或 FF2,目前已经有一些方法可以篡改 Referer 值。如果 bank.example 网站支持 IE6 浏览器,黑客完全可以把用户浏览器的 Referer 值设为以 bank.example 域名开头的地址,这样就可以通过验证,从而进行 CSRF 攻击。

即便是使用最新的浏览器,黑客无法篡改 Referer 值,这种方法仍然有问题。因为 Referer 值会记录下用户的访问来源,有些用户认为这样会侵犯到他们自己的隐私权,特别是有些组织担心 Referer 值会把组织内网中的某些信息泄露到外网中。因此,用户自己可以设置浏览器使其在发送请求时不再提供 Referer。当他们正常访问银行网站时,网站会因为请求没有 Referer 值而认为是 CSRF 攻击,拒绝合法用户的访问。

CSRF-跨站点请求伪造相关推荐

  1. Django中如何防范CSRF跨站点请求伪造攻击

    CSRF概念 CSRF跨站点请求伪造(Cross-Site Request Forgery). 攻击者盗用了你的身份,以你的名义发送恶意请求,对服务器来说这个请求是完全合法的,但是却完成了攻击者所期望 ...

  2. 详解CSRF跨站点请求伪造

    CSRF攻击: CSRF跨站点请求伪造(Cross-Site Request Forgery):大概可以理解为攻击者盗用了你的身份,以你的名义在恶意网站发送恶意请求,对服务器来说这个请求是完全合法的, ...

  3. 安全测试之 CSRF 跨站点请求伪造

    原文由发表于TesterHome社区,点击原文链接可与作者直接交流. ▌CSRF 攻击 CSRF 跨站点请求伪造 (Cross-Site Request Forgery):大概可以理解为攻击者盗用了你 ...

  4. 常见的Web攻击方式:SQL注入、XSS跨站脚本攻击、CSRF跨站点请求伪造

    常见的Web攻击有SQL注入.XSS跨站脚本攻击.跨站点请求伪造共三类,下面分别简单介绍. 1 SQL注入 1.1 原理 SQL注入就是通过把SQL命令插入到Web表单递交或输入域名或页面请求的查询字 ...

  5. 密码学系列之:csrf跨站点请求伪造

    文章目录 简介 CSRF的特点 CSRF的历史 CSRF攻击的限制 CSRF攻击的防范 STP技术 Cookie-to-header token Double Submit Cookie SameSi ...

  6. Web渗透-CSRF跨站点请求伪造(Cross—Site Request Forgery)

    CSRF/XSRF 跨站点请求伪造 `也被称为"One Click Attack"或者Session Riding` 一种对网站的恶意利用漏洞 但你不能保证以下情况不会发生: CS ...

  7. security框架工作笔记002---CSRF跨站点请求伪造(Cross—Site Request Forgery)_理解和防御

    JAVA技术交流QQ群:170933152  CSRF概念:CSRF跨站点请求伪造(Cross-Site Request Forgery),跟XSS攻击一样,存在巨大的危害性,你可以这样来理解:   ...

  8. jango的CSRF跨站请求伪造即解决方法

    1.前戏 CSRF概念:CSRF跨站点请求伪造(Cross-Site Request Forgery),跟XSS攻击一样,存在巨大的危害性,你可以这样来理解:        攻击者盗用了你的身份,以你 ...

  9. 跨站点请求伪造_十大常见web漏洞——跨站点请求伪造(CSRF)

    CSRF介绍 什么是CSRF呢?我们直接看例子. https://mp.toutiao.com/profile_v3/graphic/preview?do=delete&pgc_id=6829 ...

  10. 我要学ASP.NET MVC 3.0(十三): MVC 3.0 防止跨站点请求伪造 (CSRF) 攻击

    我要学ASP.NET MVC 3.0(十三): MVC 3.0 防止跨站点请求伪造 (CSRF) 攻击 概述      众所周知,ASP.Net MVC程序在浏览器运行时产生了标准的Html标签,包括 ...

最新文章

  1. 关于笔记本电脑玩一些游戏不能全屏的注册表修改法
  2. neo4j客户端下载
  3. Xcode升级后插件失效的原理与修复办法
  4. 从flink-example分析flink组件(1)WordCount batch实战及源码分析
  5. Java开发以及Web 和移动程序员必须了解的10个框架
  6. dama数据管理知识体系指南第二版pdf_DMBOK数据管理 - CDMP认证培训
  7. 【NOI2004】【洛谷P1486】郁闷的出纳员(Splay写法)
  8. 可支持任意级选择器级联的控件函数
  9. 移动平台前端开发总结
  10. VirtualBox 0X00000000指令引用的0X00000000内存该内存不能为written
  11. 基础的强化学习(RL)算法及代码详细demo
  12. The Fool 傻子
  13. dns被劫持怎么办?网页总是跳转到别的、你的DNS可能被劫持了!
  14. 成熙英语——我的选择
  15. 从词向量到概念发现,知识图谱让机器更加理解人类语言
  16. MyBatis关联对象查询
  17. Go 语言入门三部曲(一):能看懂 Go 语言
  18. linux查看IP端口占用情况
  19. 网络新闻评论观点挖掘系统实现
  20. SQL注入——基于时间的盲注(sqli-labs less9)

热门文章

  1. webexam php,Laravel View Composer - 当 include 一个模板时,自动获取其所需的变量
  2. ahpu程序设计协会蓝桥选拔赛题解
  3. (第16-17讲)STM32F4单片机,FreeRTOS中断管理简介【视频笔记、代码讲解】【正点原子】【原创】
  4. Android基础入门教程——2.5.1 Toast(吐司)的基本使用
  5. C++算法 N阶递减三角形
  6. 马化腾、任正非用“灰度”捕捉新商业机会
  7. Windows环境下制作Ubuntu的U盘启动工具
  8. BoxCutter:吸附
  9. 【电脑办公软件】万彩办公大师教程丨图片转PDF工具
  10. 树莓派3B+TensorFlow Python3.7