CSRF攻击与防御

概述

CSRF是Cross Site Request Forgery的缩写,中文是跨站点请求伪造;接下来将和大家分享这种攻击的原理、实施的方法、以及防御的几种方案;

CSRF攻击的原理

通过在恶意网站部署好攻击代码和相关数据,然后引导目标网站的已经授权的用户进入恶意网站,由于浏览器已经获得了目标网站的用户授权票据,因此恶意网站就可以执行“事先”部署好的代码向目标网站提交数据使目标网站执行一些写的操作,比如删除目标网站的数据、向目标网站提交垃圾数据等,然而这个过程是在后台默默执行的,用户毫不知情。

举个例子说明一下吧:

假设www.t.com是目标网站,有一个页面www.t.com/blog/delete.aspx?id=123 是删除ID为123的博文操作;

那么攻击者就可以在恶意网站www.a.com/csrfpage.aspx页面部署下面的代码:

<form id="csrffrm" action="http://www.t.com/blog/delete.aspx" target="hideiframe"><input name="id" type="hidden" value="123" /></form> <iframe name="hideiframe" style='display:none'></iframe> <script> document.getElementById("csrffrm").submit(); </script>

然后狡猾的攻击者就可以通过各种方式吸引已经成功登陆www.t.com的用户点击进入www.a.com/csrfpage.aspx页面,最后恶意代码被执行,用户的博文ID为123的文章在不知不觉中被攻击者删除了

CSRF攻击的条件

根据上面的原理可以看出要实施CSRF攻击需要满足下面几个条件:

一、需要了解目标系统的目录和相关参数名称,其实要满足这个条件并不困难,攻击者通过相关的“系统目录彩虹表”进行检测又或者攻击者本身也是目标系统的用户之一,那么了解目标系统就更容易了;

二、需要一个执行恶意代码的网站,这个网站有可能是攻击者事先部署好的网站,或者恶意网站存在XSS漏洞刚好被攻击者利用;

三、需要目标系统的用户登录并且获得了合法的操作权限,同时用户被诱惑进入了恶意的网站;

要实施CSRF攻击要满足这三个条件,由于这些条件并不是那么容易被满足,所以比较容易被开发者所忽略。

CSRF攻击的防御策略

1.使用验证码

记得之前的12306网站上每次查票都要输入恶心的验证码,之所以要设计这个验证码它的目的是为了防止机器刷票,当然也能有效的预防CSRF攻击,但是如果每个操作都要用户输入验证码用户可能会崩溃掉,用户体验效果非常的不好;

2.检查Referer(来源)

除了验证码还可以检查Referer是否来自于同一个源,如果Referer是同源的那么这个操作是可信的,这个方法通常用于防止图片盗链,但是有些时候Referer并不是那么的可靠,服务器并不是能够百分之百的获得,比如如果用户启用了浏览器的隐私策略那么浏览器就有可能阻止发送Referer,服务器就有可能无法获取到这个值,所以这个方式不符合科学严谨的原则;

3.使用token(随机令牌)

服务器生成一个随机令牌,并保存起来,可以保存在服务端的session集合里边,或者保存在客户端的cookie、或者页面视图状态中都是可以的,由于浏览器的同源策略,恶意网站无法读取到目标网站的cookie和页面视图状态,然后把随机令牌随表单一起提交并在服务端验证随机令牌的有效性;

点赞
收藏

评论区

加载中...

相关推荐

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,缩写也称XSCF,也被称之为“oneclickattack”或者sessionriding;CSRF和XSS非常的像,但是它们是有很大的区别的,并且攻击方式也不一样;XSS是利用站点内的信任用户,而CSRF是通过伪装来自信任用户的请求来利用信任的

Django csrf,xss,sql注入

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

Django与CSRF 、AJAX

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