CSRF攻击与防御

Wesley13
• 阅读 923

概述

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

CSRF攻击的原理

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

举个例子说明一下吧:

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

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

然后狡猾的攻击者就可以通过各种方式吸引已经成功登陆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和页面视图状态,然后把随机令牌随表单一起提交并在服务端验证随机令牌的有效性;

点赞
收藏
评论区
推荐文章
blmius blmius
3年前
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
待兔 待兔
5个月前
手写Java HashMap源码
HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22
Jacquelyn38 Jacquelyn38
3年前
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
3年前
CSRF 攻击原理及防护
  CSRF的英文全称是crosssiterequestforgery,缩写也称XSCF,也被称之为“oneclickattack”或者sessionriding;CSRF和XSS非常的像,但是它们是有很大的区别的,并且攻击方式也不一样;XSS是利用站点内的信任用户,而CSRF是通过伪装来自信任用户的请求来利用信任的
Wesley13 Wesley13
3年前
Java日期时间API系列31
  时间戳是指格林威治时间1970年01月01日00时00分00秒起至现在的总毫秒数,是所有时间的基础,其他时间可以通过时间戳转换得到。Java中本来已经有相关获取时间戳的方法,Java8后增加新的类Instant等专用于处理时间戳问题。 1获取时间戳的方法和性能对比1.1获取时间戳方法Java8以前
Stella981 Stella981
3年前
Django csrf,xss,sql注入
一、csrf跨站请求伪造(Crosssiterequestforgery)CSRF的攻击原理:简单说就是利用了高权限帐号(如管理员)的登录状态或者授权状态去做一些后台操作,但实际这些状态并没有被我们直接获取到(获取那是XSS干的事)。CSRF能够攻击的根本原因是:服务器无法识别你的来源是否可靠。防御CSRF攻击:服务端验证请求的token一
Stella981 Stella981
3年前
Django与CSRF 、AJAX
CSRF(Crosssiterequestforgery)跨站请求伪造,是一种常见的网络攻击手段,具体内容和含义请大家自行百度。Django为我们提供了防范CSRF攻击的机制。一、基本使用默认情况下,使用djangoadminstartprojectxxx命令创建工程时,CSRF防御机制就已经开启了。如果没有开启,请
Stella981 Stella981
3年前
Flask模拟实现CSRF攻击
CSRFCSRF全拼为CrossSiteRequestForgery,译为跨站请求伪造。CSRF指攻击者盗用了你的身份,以你的名义发送恶意请求。包括:以你名义发送邮件,发消息,盗取你的账号,甚至于购买商品,虚拟货币转账......造成的问题:个人隐私泄露以及财产安全。CSRF攻
Wesley13 Wesley13
3年前
CSRF攻击与防御(写得非常好)
    转载地址:http://www.phpddt.com/reprint/csrf.htmlCSRF概念:CSRF跨站点请求伪造(Cross—SiteRequestForgery),跟XSS攻击一样,存在巨大的危害性,你可以这样来理解:    攻击者盗用了你的身份,以你的名义发送恶意请求,对服务器来说这个请求是
Wesley13 Wesley13
3年前
CSRF攻击原理以及防御方法(写的很好)
转载地址:http://www.phpddt.com/reprint/csrf.htmlCSRF概念:CSRF跨站点请求伪造(Cross—SiteRequestForgery),跟XSS攻击一样,存在巨大的危害性,你可以这样来理解:    攻击者盗用了你的身份,以你的名义发送恶意请求,对服务器来说这个请求是完全合法的,但是却完成