CSRF 攻击原理及防护

Wesley13
• 阅读 783

  CSRF 的英文全称是 cross-site request forgery ,缩写也称 XSCF,也被称之为“one click attack” 或者 session riding;

CSRF 和 XSS 非常的像,但是它们是有很大的区别的,并且攻击方式也不一样;XSS 是利用站点内的信任用户,而 CSRF 是通过伪装来自信任用户的请求来利用信任的网站;与 XSS 相比, CSRF 攻击往往不怎么流行也很难防范,所以它的危险性相对更高;

常用的防御方法:1)、验证 http referer 字段;2)、在请求地址中添加 token 并验证;3)、在 http 头中自定义属性并验证;

验证 http referer 字段

根据 http 协议,在 http 头中有一个字段叫 referer ,它记录了该 http 请求的来源地址,在通常情况下,访问一个安全受限页面的请求来自于同一个网站,比如需要访问  http://bank.example/withdraw?account=bob&amount=1000000&for=Mallory,用户必须先登录 bank.example ,然后通过点击页面上的按钮来触发转账事件,这时候,该转账请求的 http referer 值就会是转账所在页面的 url,通常以 bank.example 域名开头的地址,而如果黑客要对银行网站实施 CSRF 攻击,他只能在自己的网站构造请求;

其实这种方法也并不是万无一失的,通过 http referer 的验证其实就是把安全交给了第三方,但是有些浏览器,例如:IE6 和 FF2 ,是可以有一些方法对 referer 的值进行篡改的;

在请求头中添加 token 验证

CSRF 攻击之所以能够成功,是因为黑客可以完全的伪造用户的请求,所以要地域 CSRF,关键在于请求中放入黑客不知道的或者所伪造不了的信息;

在 http 中自定义属性并验证

点赞
收藏
评论区
推荐文章
blmius blmius
2年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
Jacquelyn38 Jacquelyn38
2年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
Wesley13 Wesley13
2年前
CSRF攻击与防御
概述CSRF是CrossSiteRequestForgery的缩写,中文是跨站点请求伪造;接下来将和大家分享这种攻击的原理、实施的方法、以及防御的几种方案;CSRF攻击的原理通过在恶意网站部署好攻击代码和相关数据,然后引导目标网站的已经授权的用户进入恶意网站,由于浏览器已经获得了目标网站的用户授权票据,因此恶意网站就可以执行“事先”部署好的
Stella981 Stella981
2年前
Django csrf,xss,sql注入
一、csrf跨站请求伪造(Crosssiterequestforgery)CSRF的攻击原理:简单说就是利用了高权限帐号(如管理员)的登录状态或者授权状态去做一些后台操作,但实际这些状态并没有被我们直接获取到(获取那是XSS干的事)。CSRF能够攻击的根本原因是:服务器无法识别你的来源是否可靠。防御CSRF攻击:服务端验证请求的token一
Stella981 Stella981
2年前
Django与CSRF 、AJAX
CSRF(Crosssiterequestforgery)跨站请求伪造,是一种常见的网络攻击手段,具体内容和含义请大家自行百度。Django为我们提供了防范CSRF攻击的机制。一、基本使用默认情况下,使用djangoadminstartprojectxxx命令创建工程时,CSRF防御机制就已经开启了。如果没有开启,请
Easter79 Easter79
2年前
Twitter的分布式自增ID算法snowflake (Java版)
概述分布式系统中,有一些需要使用全局唯一ID的场景,这种时候为了防止ID冲突可以使用36位的UUID,但是UUID有一些缺点,首先他相对比较长,另外UUID一般是无序的。有些时候我们希望能使用一种简单一些的ID,并且希望ID能够按照时间有序生成。而twitter的snowflake解决了这种需求,最初Twitter把存储系统从MySQL迁移
Stella981 Stella981
2年前
Flask模拟实现CSRF攻击
CSRFCSRF全拼为CrossSiteRequestForgery,译为跨站请求伪造。CSRF指攻击者盗用了你的身份,以你的名义发送恶意请求。包括:以你名义发送邮件,发消息,盗取你的账号,甚至于购买商品,虚拟货币转账......造成的问题:个人隐私泄露以及财产安全。CSRF攻
Wesley13 Wesley13
2年前
CSRF攻击与防御(写得非常好)
    转载地址:http://www.phpddt.com/reprint/csrf.htmlCSRF概念:CSRF跨站点请求伪造(Cross—SiteRequestForgery),跟XSS攻击一样,存在巨大的危害性,你可以这样来理解:    攻击者盗用了你的身份,以你的名义发送恶意请求,对服务器来说这个请求是
Wesley13 Wesley13
2年前
CSRF攻击原理以及防御方法(写的很好)
转载地址:http://www.phpddt.com/reprint/csrf.htmlCSRF概念:CSRF跨站点请求伪造(Cross—SiteRequestForgery),跟XSS攻击一样,存在巨大的危害性,你可以这样来理解:    攻击者盗用了你的身份,以你的名义发送恶意请求,对服务器来说这个请求是完全合法的,但是却完成
京东云开发者 京东云开发者
5个月前
Java服务总在半夜挂,背后的真相竟然是... | 京东云技术团队
最近有用户反馈测试环境Java服务总在凌晨00:00左右挂掉,用户反馈Java服务没有定时任务,也没有流量突增的情况,Jvm配置也合理,莫名其妙就挂了