CSRF跨站请求伪造攻击详解

一、CSRF攻击概述

1.1 CSRF攻击定义

  1. 用户浏览器加载恶意网站时,浏览器中的恶意网站页面向另一目标网站自主发起一个恶意HTTP请求,该攻击方式即为CSRF攻击。

1.2 CSRF攻击的本质

  1. 在CSRF攻击中,攻击者诱使用户的浏览器发起一个恶意请求,本质上是借助用户的凭证,以用户的身份去执行特定的操作。
  2. 在用户访问攻击者构造的恶意页面时,如果此时浏览器访问第三方站点带上了第三方的Cookie,那么第三方站点会认为这是一个已登录的用户的访问请求,浏览器就可顺利完成请求操作,因此该攻击方式叫做“跨站请求伪造”。
  3. 在整个攻击过程中,攻击者并没有拿到受害者的身份凭证,也拿不到操作后的返回结果(同源策略),攻击者只是诱使受害者发出了一个特定的请求。

二、CSRF蠕虫

  1. 实现蠕虫传播需要利用漏洞携带攻击代码自动扩散,如果CSRF漏洞满足以下两个条件,即可实现自动扩散:
    1. 在应用中发送其他用户课件内容的功能存在CSRF漏洞,比如发私信、发个人动态、发博客等功能。
    2. 发送的内容中可以嵌入链接,诱使用户点击,从而触发CSRF漏洞。
  2. 以“发博客功能存在CSRF漏洞”为例,攻击者可以构造恶意页面,内容如下:
<form id="myForm" astion="http://example.com/new_blog" method="POST"><input name="content" value='<a href="http://evil.site/csrf.html">click me</a>'>
</form>
<script>document.getElementById('myForm').submit();
</script>

三、防御CSRF攻击

3.1 不成熟方案

3.1.1 验证码

  1. CSRF攻击在用户不知情的情况下构造了网络请求,而验证码则强制用户必须与应用进行交互才能完成最终请求,因此在通常情况下,验证码能够很好地遏止CSRF攻击。
  2. 缺点
    1. 处于用户体验考虑,网站无法给所有操作都加上验证码,因此,验证码只能作为防御CSRF攻击的一种辅助手段,不能作为最主要的解决方案。

3.1.2 Referrer校验

  1. 常见的互联网应用,页面与页面之间都有一定的逻辑关系,因此每个正常请求的Referrer会有一定规律,比如在论坛“发帖”的操作,在正常情况下需要先登录到用户后台,或者访问具有发帖功能的页面,在提交“发帖”的表单时,Referrer值必然是发帖表单所在的页面。如果Referrer值不是这个页面,甚至不是发帖网站的域,那么该请求极有可能是CSRF攻击。
  2. 缺点
    1. 缺点一:服务器并非在什么时候都能获取到请求头中的Referrer。
      1. 不少浏览器扩展为了保护个人隐私,常常会限制Referrer的发送;在某些情况下,浏览器本身就不会发送Referrer,比如从HTTPS跳转到HTTP,出于保护HTTPS全链路数据的考虑,浏览器不会发送Referrer到明文的HTTP请求中。
      2. 如果服务端应用忽略了Referrer为空的情况,对这种请求不做拦截,那么CSRF防御功能将完全失效。
    2. 缺点二:很多Web应用功能复杂,开发者如果对每个功能都校验完整的Referrer,代码将很难维护。
      1. 当业务变化导致URL变动时,还得更改其他接口的Referrer校验逻辑,因此大部分校验Referrer的CSRF防御方案都仅仅是校验Referrer中的域名。
      2. 如果应用内部本身就能发送链接,那么在应用内部就能发起Referrer合法的恶意GET请求,这样还是能够绕过检测Referrer值的方案。

3.1.3 Cookie的SameSite属性

  1. Cookie的SameSite属性可以控制Cookie在跨站点请求中是否生效。
  2. 尽管将Cookie的SameSite属性设置为Strict模式能够缓解域外的CSRF攻击,但仍避免不了从域内发起CSRF攻击。
  3. Cookie的SameSite属性在设计时就不是用于CSRF防御的,其只能在一定程度上缓解CSRF攻击。

3.2 成熟方案

3.2.1 Anti—CSRF Token

  1. CSRF攻击之所以能成功,其原因是重要操作的所有参数都是可以被攻击者猜到的。如果攻击者能够猜出URL中的所有参数与参数值,就能够成功构造一个伪造的请求;反之,则无法攻击成功。
  2. Anti—CSRF Token防御方案
    1. 用户在发起“进行重要操作”的请求时,需要指明一个Token参数值;
      1. 该Token参数值由服务端使用“足够安全的随机数生成算法”生成并存储在客户端的Cookie或服务端的session中,Token参数值为用户与服务端的共同秘密;
    2. 如果发送请求时的参数值与Cookie中的Token参数值或session中的Token参数值不相同,那么该请求无效;
    3. 由此,在用户不知情的情况下,攻击者无法构造出含有正确参数的恶意请求;
  3. Anti—CSRF Token方案的使用原则
    1. Token参数值一定要足够随机化;
    2. 为了使用方便,可以在一个用户的有效绘画周期内都使用同一个Token参数值;
    3. 在Web应用中执行敏感操作时,应该通过form表单或通过AJAX以POST请求的形式提交;
      1. 以POST请求提交能提高Token的保密性,因为如果Token出现在某个页面的URL中,则可能会通过Referrer的方式被泄露给其他站点;

四、LabCross-Site Request Forgery Attack Lab

【待更新】

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/858857.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

R数据分析:工具变量回归的做法和解释,实例解析

前几天看了个视频,是2024年诺贝尔经济学奖得主在分享自己的研究,研究问题是“制度如何形成并影响经济繁荣”,在研究这个问题的时候他的PPT中提到研究的统计过程中用到了工具变量,想着再次大家介绍一下这个方法。说不定利用这个方法,哪天我的读者里面也出个诺贝尔奖得主呢,…

昆工25考研复试时间预测(信自院)

昆工昆明理工大学、计算机技术、人工智能、软件工程、网络空间安全、891计算机专业核心综合、计算机系统结构、计算机软件与理论、计算机应用技术、通信工程、817信号与系统、信号与信息处理、通信与信息系统、通信工程(含宽带网络、移动通信等)

WebP图片格式

WebP WebP 是一种图片文件格式,由 Google 开发,用于提供更好的图像压缩性能。支持有损压缩和无损压缩,同时支持透明度(类似 PNG 格式的 alpha 通道)和动画(类似 GIF 格式)。 WebP特点高效压缩 •有损压缩:与 JPEG 相比,WebP 的文件体积更小,同时保持类似的图像质量。…

谁让你创建两个对象的?

如果CLASSPATH下有两个不同版本的jar包,一个版本的jar包有@Component注解,另外一个版本没有,Spring到底会不会创建Bean?问题现象 之前遇到过一个问题,在一个微服务的目录下有相同功能 jar 包的两个不同的版本,其中一个版本里面的类有 @Component 注解,另外一个版本的类里…

打印三角形金字塔 、debug、java的方法、命令行传参、可变参数20241225

打印三角形金字塔 debug20241225package com.pangHuHuStudyJava.struct; public class Print_Tran {public static void main(String[] args) {for (int j = 0; j < 5; j++) {for (int r = 5; r > j; r--) {System.out.print( );}for (int s = 0; s < ((2*j)+1); s++…

OpenAI o3模型震撼发布:编程界的革命性突破,程序员的未来将何去何从?

当人工智能踏足编程领域,生产力的提升让人瞠目结舌。就在近日,OpenAI 发布了全新的 o3模型,其强大的代码生成能力和上下文理解能力,将编程带入了一个全新的时代。是机遇还是挑战?程序员们将如何面对这场技术风暴?o3模型究竟有何与众不同之处?它的发布会对程序员和整个软…

[Java/压缩] Java读取Parquet文件

序:契机生产环境有设备出重大事故,又因一关键功能无法使用,亟需将生产环境的原始MQTT报文(以 parquet 文件格式 + zstd 压缩格式 落盘)DOWN到本地,读取并解析。本文聚焦在 本地电脑,用 java 读取 parquet 文件相当多网络文档的读取代码无法正常运行,有必要记录一二,后续…

莫队从入门到人门

普通莫队 详介(P2709 小B的询问) 普通莫队处理问题的前提是问题可以离线,多次区间查询,\(O(n\sqrt m)\) 能过。 我们以 P2709 小B的询问 为例,假设当前区间为 \([l,r]\),答案为 \(ans\),那么 \(r\) 右移一位时,新加入一个数 \(x\),我们只要把 \(ans\) 加上 \(x\) 的贡…

nacos安装注意事项

一年多没玩了,都快忘了,最新版本已经2.3.x了 3.0也快问世了 Linux/Unix/Mac 单机启动命令: sh startup.sh -m standalone Windows startup.cmd -m standalone如果直接未启动就是集群模式,但是要注意nacos.properties里面配置集群信息本文来自博客园,作者:余生请多指教ANT…

PWN系列-2.27版本利用setcontext实现orw

PWN系列-2.27版本利用setcontext实现orw 知识 开启沙箱之后,我们就只能用orw的方式来得到flag。 这篇博客主要讲通过劫持__free_hook或者__malloc_hook利用setcontext在libc或者heap上执行rop或者shellcode。 在free堆块的时候,rdi会指向堆块,在检测到__free_hook有值的情况…

shell语法保姆级教程

Shell脚本 建立一个sh脚本 touch 1.sh (新建脚本文件)vi 1.sh(编写文件内容)按 i 可以写入内容,按esc :wq退出并保存解释 1、创建脚本文件 2、脚本文件中第一行为指定脚本编译器:# !/bin/bash 最终调用的都是dash执行shell脚本命令: 1、./1.sh难道我们必须要修改权限才能执…

从0开始学uniapp——认识HBuilderX

为什么使用uniapp:可以多端运行,写好了这一套可以用在h5,安卓程序,小程序多端,很方便。1.百度搜HBuilderX,使用该编译器学习uniapp 2.新建一个默认项目 pages——用于存放页面,这里都是.vue后缀的页面, pages.json——用于存放路由pages数组里按例子添加即可,HBuilder…