CSRF 攻击原理及防护

  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 中自定义属性并验证

点赞
收藏

评论区

加载中...

相关推荐

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

Oracle 分组与拼接字符串同时使用

SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(

手写Java HashMap源码

HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22

CSRF攻击与防御

概述CSRF是CrossSiteRequestForgery的缩写,中文是跨站点请求伪造;接下来将和大家分享这种攻击的原理、实施的方法、以及防御的几种方案;CSRF攻击的原理通过在恶意网站部署好攻击代码和相关数据,然后引导目标网站的已经授权的用户进入恶意网站,由于浏览器已经获得了目标网站的用户授权票据,因此恶意网站就可以执行“事先”部署好的

Django csrf,xss,sql注入

一、csrf跨站请求伪造(Crosssiterequestforgery)CSRF的攻击原理:简单说就是利用了高权限帐号(如管理员)的登录状态或者授权状态去做一些后台操作,但实际这些状态并没有被我们直接获取到(获取那是XSS干的事)。CSRF能够攻击的根本原因是:服务器无法识别你的来源是否可靠。防御CSRF攻击:服务端验证请求的token一

Django与CSRF 、AJAX

CSRF(Crosssiterequestforgery)跨站请求伪造,是一种常见的网络攻击手段,具体内容和含义请大家自行百度。Django为我们提供了防范CSRF攻击的机制。一、基本使用默认情况下,使用djangoadminstartprojectxxx命令创建工程时,CSRF防御机制就已经开启了。如果没有开启,请