跨站请求伪造CSRF(Cross-site request forgery)

2023-10-31

 

目录

一、什么是CSRF

二、可能存在CSRF攻击的三个条件

一个相关的动作

基于 Cookie 的会话处理

没有不可预测的请求参数

二、常见的CSRF攻击

        1、CSRF令牌的验证取决与请求方法

       2、CSRF令牌的验证取决与令牌是否存在

      3、CSRF令牌没有绑定到会话

      4、CSRF令牌绑定到非会话cookie

        5、CSRF令牌复制于COOKIE

        6、基于Referer的CSRF防御

                1)Referer的验证取决于是否存在

                2)可绕过的Referer


来自PortSwiggerr靶场

一、什么是CSRF


        跨站请求伪造(也称为 CSRF)是一种 Web 安全漏洞,允许攻击者诱导用户执行他们不打算执行的操作。它允许攻击者部分规避同源策略,该策略旨在防止不同网站相互干扰。

二、可能存在CSRF攻击的三个条件

  • 一个相关的动作

        应用程序中存在攻击者有理由诱导的操作。这可能是特权操作(例如修改其他用户的权限)或对用户特定数据的任何操作(例如更改用户自己的密码)。

  • 基于 Cookie 的会话处理

        执行该操作涉及发出一个或多个 HTTP 请求,并且应用程序仅依赖会话 cookie 来识别发出请求的用户。没有其他机制可用于跟踪会话或验证用户请求。

  • 没有不可预测的请求参数

        执行该操作的请求不包含攻击者无法确定或猜测其值的任何参数。例如,当导致用户更改密码时,如果攻击者需要知道现有密码的值,则该功能不会受到攻击。        

二、常见的CSRF攻击


        1、CSRF令牌的验证取决与请求方法


        某些应用程序在请求使用 POST 方法时正确验证令牌,但在使用 GET 方法时跳过验证。
在这种情况下,攻击者可以切换到 GET 方法来绕过验证并进行 CSRF 攻击:

GET /email/change?email=pwned@evil-user.net HTTP/1.1
Host: vulnerable-website.com
Cookie: session=2yQIDcpia41WrATfjPqvm9tOkDvkMvLmGET /email/change?email=pwned@evil-user.net HTTP/1.1
Host: vulnerable-website.com
Cookie: session=2yQIDcpia41WrATfjPqvm9tOkDvkMvLm


 

       2、CSRF令牌的验证取决与令牌是否存在

        某些应用程序在令牌存在时正确验证令牌,但如果省略令牌则跳过验证。
在这种情况下,攻击者可以删除包含令牌的整个参数(不仅仅是它的值)以绕过验证并进行 CSRF 攻击:

 

POST /email/change HTTP/1.1
Host: vulnerable-website.com
Content-Type: application/x-www-form-urlencoded
Content-Length: 25
Cookie: session=2yQIDcpia41WrATfjPqvm9tOkDvkMvLm

email=pwned@evil-user.net


      3、CSRF令牌没有绑定到会话


        某些应用程序不会验证令牌与发出请求的用户是否属于同一会话。相反,应用程序维护它已发布的全局令牌池,并接受该池中出现的任何令牌。
在这种情况下,攻击者可以使用自己的帐户登录应用程序,获取有效令牌,然后在 CSRF 攻击中将该令牌提供给受害用户。


      4、CSRF令牌绑定到非会话cookie


        在上述漏洞的一个变体中,一些应用程序确实将 CSRF 令牌绑定到一个 cookie,但没有绑定到用于跟踪会话的同一个 cookie。当应用程序使用两个不同的框架时,很容易发生这种情况,一个用于会话处理,一个用于 CSRF 保护,它们没有集成在一起:

 

POST /email/change HTTP/1.1
Host: vulnerable-website.com
Content-Type: application/x-www-form-urlencoded
Content-Length: 68
Cookie: session=pSJYSScWKpmC60LpFOAHKixuFuM4uXWF; csrfKey=rZHCnSzEp8dbI6atzagGoSYyqJqTz5dv

csrf=RhV7yQDO0xcq9gLEah2WVbmuFqyOq7tY&email=wiener@normal-user.com

        这种情况更难利用,但容易受到攻击。如果网站包含任何允许攻击者在受害者的浏览器中设置 cookie 的行为,则攻击是可能的。攻击者可以使用自己的帐户登录应用程序,获取有效的令牌和关联的 cookie,利用 cookie 设置行为将其 cookie 放入受害者的浏览器,并在 CSRF 攻击中将其令牌提供给受害者。


        5、CSRF令牌复制于COOKIE


             在上述漏洞的进一步变体中,一些应用程序不维护已颁发令牌的任何服务器端记录,而是在 cookie 和请求参数中复制每个令牌。验证后续请求时,应用程序只需验证请求参数中提交的令牌与 cookie 中提交的值是否匹配。这有时被称为针对 CSRF 的“双重提交”防御,并且被提倡是因为它易于实现并且避免了对任何服务器端状态的需要:```

 

POST /email/change HTTP/1.1
Host: vulnerable-website.com
Content-Type: application/x-www-form-urlencoded
Content-Length: 68
Cookie: session=1DQGdzYbOJQzLP7460tfyiv3do7MjyPw; csrf=R8ov2YBfTYmzFyjit8o2hKBuoIjXXVpa

csrf=R8ov2YBfTYmzFyjit8o2hKBuoIjXXVpa&email=wiener@normal-user.com

        在这种情况下,如果网站包含任何 cookie 设置功能,攻击者可以再次执行 CSRF 攻击。在这里,攻击者不需要获取自己的有效令牌。他们只需发明一个令牌(可能是所需格式,如果正在检查的话),利用 cookie 设置行为将他们的 cookie 放入受害者的浏览器,并在他们的 CSRF 攻击中将他们的令牌提供给受害者。

        6、基于Referer的CSRF防御


        除了使用 CSRF 令牌的防御之外,一些应用程序使用 HTTPReferer标头来尝试防御 CSRF 攻击,通常是通过验证请求是否来自应用程序自己的域。这种方法通常不太有效,并且经常被绕过。


                1)Referer的验证取决于是否存在


          某些应用程序Referer会在请求中存在标头时验证标头,但如果标头被省略,则跳过验证。
在这种情况下,攻击者可以制作他们的 CSRF 漏洞利用,导致受害者用户的浏览器Referer在结果请求中丢弃标头。有多种方法可以实现这一点,但最简单的方法是在承载 CSRF 攻击的 HTML 页面中使用 META 标记:

<meta name="referrer" content="never">

                2)可绕过的Referer


        一些应用程序Referer以一种可以绕过的幼稚方式验证标头。例如,如果应用程序验证域中的域以Referer期望值开头,那么攻击者可以将其放置为他们自己域的子域:
 

http://vulnerable-website.com.attacker-website.com/csrf-attack

同样,如果应用程序只是验证Referer包含自己的域名,那么攻击者可以将所需的值放在 URL 的其他位置:

http://attacker-website.com/csrf-attack?vulnerable-website.com

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

跨站请求伪造CSRF(Cross-site request forgery) 的相关文章

  • 如何将 CSRF 令牌从服务器传递到客户端?

    这听起来可能是一个愚蠢的问题 我想澄清这一点 如果首先将令牌发送给客户端并且客户端发回相同的令牌 csrf 令牌如何帮助识别跨站请求 恶意客户端不会得到服务器的响应吗 如果我们在发送令牌时检查来源 那么令牌检查的事情是不是显得多余 我们如何
  • 双重提交 Cookie 和多个选项卡?

    The 双重提交cookie https www owasp org index php Cross Site Request Forgery 28CSRF 29 Prevention Cheat Sheet Double Submit C
  • Phoenix CSRF 令牌不匹配

    试图让 ajax 工作在 Phoenix 上 我通过执行以下操作来获取 csrf 令牌 这样我就拥有了它
  • Django CSRF 框架无法禁用并且正在破坏我的网站

    django csrf 中间件无法禁用 我已从项目的中间件中将其注释掉 但由于缺少 CSRF 问题 我的登录失败 我在 Django 主干上工作 如果中间件中未启用 CSRF 它如何会导致问题 我必须禁用它 因为我的网站上有很多 POST
  • ModSecurity CSRF 规则警报

    我已经安装了 Owasp ModSecurity 之后我的应用程序上的所有页面都有此规则警报 ModSecurity Warning Match of eq 1 against ARGS CSRF TOKEN required file e
  • Django CSRF 框架有很多失败

    我的站点上的 CSRF Django 中间件 来自 SVN trunk 的版本 出现了很多失败 我得到的唯一错误是 CSRF 失败 原因 CSRF 令牌丢失或不正确 我如何诊断这些 CSRF 错误来自何处 我自己无法导致 CSRF 错误 但
  • 使用客户端指纹对 JWT 令牌进行编码?

    我想知道是否会是最佳实践使用客户端指纹作为 JWT 秘密进行编码 然而 我在 WWW 上找不到有关这个问题的任何内容 但到目前为止 我这样做是有意义的 我正在考虑使用 JavaScript 生成指纹客户端 并在每次调用时将其发送到 API
  • 如何在Reactjs中生成CSRF令牌并发送到Play框架?

    我试图从反应表单发送发布请求到播放框架 它抛出以下错误 Caused by java lang RuntimeException No CSRF token was generated for this request Is the CSR
  • Flask-wtf:在我发布表单之前,csrf_token 已从会话中删除

    我使用 Flask 和 Flask Security 特别是关于我的 csrf 问题的 Flask WTF 来 简化 用户注册 登录的过程 到目前为止并不容易 我在前端使用 BackboneJS 因此我有点破解了使用 Flask WTF 的
  • 如何设置 AntiForgeryToken cookie 路径

    前者HtmlHelper AntiForgeryToken https msdn microsoft com en us library dd492243 28v vs 118 29 aspx方法允许人们重写string path已弃用 O
  • 反 CSRF cookie?

    我正在构建一个大量使用ajax 的应用程序 大多数反 CSRF 解决方案都围绕将一些信息放入视图状态并在发布时处理该数据 但是 我无权访问 ajax 调用中的视图状态 我计划生成一个 GUID 以在 cookie 和会话状态中插入令牌 使
  • @csrf_exempt 在 Django 1.4 中停止工作

    我有以下代码 在 Django 1 2 5 中运行良好 from django views decorators csrf import csrf exempt class ApiView object def call self requ
  • 为什么codeigniter2不以更安全的方式存储csrf_hash,例如会话?

    为什么生成的 CSRF 保护令牌没有像建议的那样通过 SESSION 保存和使用here http codeutopia net blog 2008 10 16 how to csrf protect all your forms 目前在C
  • RESTful 应用程序中的 XSRF

    我是一名 ASP NET 开发人员 正在尝试学习 Rails 和 RESTful 方法 为了理解这一点 我计划编写一个电子邮件客户端 它会对服务器进行 RESTful GET 调用以获取电子邮件 并通过 POST 调用来发送电子邮件 要遵循
  • Phonegap 中使用 AJAX 的 CSRF 令牌

    我正在开发一个应用程序Phonegap使用 Django 后端 后端使用csrf 所以我需要我的Phonegap要使用的应用程序csrf所以它可以与Django 我读到你可以使用csrf通过Ajax 但我没能让它工作 您能举个例子告诉我我该
  • 在 play 框架中将 javascript 变量转换为 scala

    我在 javascript 中有一些变量 var something 1 var url CSRF routes Some thing something 我在编译期间收到错误 因为 某物 换句话说 不引用 javascript 变量 编译
  • 是否可以在 PHP 中使用 file_get_contents 来破坏 CSRF 令牌验证

    在每个会话的表单上使用令牌的 CSRF 预防方法是一种流行的方法 但是 我不明白这种令牌方式如何保护file get contentsPHP 可以获取跨域文件表单的内容 gt 它可以获取表单上的令牌并使用它 那么这种token方式是如何运作
  • 使用 Flask/WTForms 和 React 进行 CSRF 保护

    有没有人成功地为使用 React 作为受控组件 提交到 Flask 后端 最好使用 WTForms 的表单实现了 CSRF 保护 我看过很多部分答案 其中一个是关于 Django 的 但找不到任何关于 Flask 的明确答案 我的大问题似乎
  • PHP中如何有效防止跨站请求伪造(CSRF)

    我正在努力阻止CSRF https www owasp org index php Cross Site Request Forgery CSRF in php questions tagged php通过以下方式 A SESSION to
  • 在 Angular 6 中添加 Xsrf-Token 时出现问题

    通过 API 提交的表单中的数据已成功发布 但是将 X CSRF TOKEN 添加到标头并设置后withCredentials true结果数据未发布到名为的脚本insert php Error 加载失败http localhost sim

随机推荐

  • Idea卡在Resolving Maven dependencies的解决方案

    Idea卡在Resolving Maven dependencies的解决方案 在Reimpot All Maven Porjects时 如果项目过大 maven依赖过多 会直接卡在Resolving Maven dependencies这
  • Visual Studio 2022 升级不再附带 .NET Framework 4.5 这种古老的目标包了,本文帮你装回来...

    就在北京时间 2021 年 11 月 9 日凌晨 Visual Studio 2022 正式发布了 着急升级的小伙伴兴致勃勃地升级并卸载了原来的 Visual Studio 2019 后 发现自己的几个库项目竟然无法编译通过了 究其原因 是
  • Myeclipse中workspace打不开的处理办法

    当在Myeclipse中出现这种情况时 可进行如下操作 找到workspace中的下列文件 删除后 重启Myeclipse就可以了 转载于 https my oschina net mikezhaoweb blog 298347
  • Python之使用Python发送HTTP请求

    coding utf 8 import urllib urllib2 url http www love sysu com cloud data name 陈钰 id 12353032 para urllib urlencode data
  • 列表的合并与排序

    读入两行 两行的格式一样 都是用空格分隔的若干个整数 将这些数合并到一个列表中 降序排列后输出整个列表 提示 list1 list map int input split 读入一行由空格分隔的整数 将其存入list1列表中 输入 输入为两行
  • Flutter 设置Container高度自适应GridView和ListView

    参考 1 去掉Container的高度 2 添加下面语句 physics NeverScrollableScrollPhysics shrinkWrap true 完整代码如下 Widget imageSection1 imgPath im
  • ns3链路拥塞实验

    实验目的 收集和分析不同背景流下的路径丢包率与时延性能 拓扑结构 仿真网络拓扑 n0 n5 10 Mb s 2ms n1 n3 10Mb s 10ms n4 n6 n2 n7
  • 【华为OD统一考试A卷

    华为OD统一考试A卷 B卷 新题库说明 2023年5月份 华为官方已经将的 2022 0223Q 1 2 3 4 统一修改为OD统一考试 A卷 和OD统一考试 B卷 你收到的链接上面会标注A卷还是B卷 请注意 根据反馈 目前大部分收到的都是
  • css 预处理器

    由于多个项目中用到了sass和less 所以就学习了一下相关知识 记录下来方便随时查看 前言 css是用来编写网站样式 但是 其写法比较一成不变 如果想要使用 css 实现 js 一样的变量 常量等 就会比较臃肿 难以维护 所以 作为css
  • 使jira支持reopen率的统计

    jira本身并不能统计bug的reopen率 虽然bug工作流程中有reopen节点 只能借助第三方插件来处理 插件名称 Enhancer Plugin for JIRA 此插件支持自定义字段 自定义计数器等等高级操作 在插件管理中搜索插件
  • docker基础3——制作镜像(基于容器)

    文章目录 一 基本了解 1 1 镜像结构 1 2 docker存储驱动 1 2 1 AUFS 1 2 2 OverlayFS 1 2 3 DeviceMapper 1 3 镜像仓库 二 镜像制作 2 1 基于容器制作镜像 三 镜像导入与导出
  • 双指针的实践

    一 原理 双指针 指的是在遍历对象的过程中 不是普通的使用单个指针进行访问 而是使用两个相同方向 快慢指针 或者相反方向 对撞指针 的指针进行扫描 从而达到相应的目的 换言之 双指针法充分使用了数组有序这一特征 从而在某些情况下能够简化一些
  • 第四章 频域滤波(傅里叶变换频域显示特性)

    一 傅里叶变换频域显示特性 在光学傅里叶变换中 人们已经习惯变换域中 的低谱部分位于中央 频域频谱分布中间低 周围高的特性 有利于频谱的解析和进行各种计算与分析 1 图像中心化 借助傅里叶变换的周期性和频率位移性质 可以对频域进行换位以使频
  • Navicat 11连接MYSQL 8.0问题

    一 问题 MySQL8 0 来使用的时候 通过sqlyog 或者程序中连接数据库时 提示 Authentication plugin caching sha2 password cannot be loaded 的错误 8 0改变了身份验证
  • 第三大的数、字符串中的单词数、排列硬币

    Java学习路线 搬砖工逆袭Java架构师 简介 Java领域优质创作者 CSDN哪吒公众号作者 Java架构师奋斗者 百日刷题计划 第 16 100 天 扫描主页左侧二维码 加入群聊 一起学习 一起进步 欢迎点赞 收藏 留言 大连棒棰岛
  • hbase集群在启动的时候报错:JAVA_HOME is not set and Java could not be found

    hbase集群在启动的时候报错 JAVA HOME is not set and Java could not be found 出现这种错误 一般应该是hbase下conf文件下的hbase env sh文件中的java home的环境变
  • 信息学奥赛一本通 1224:最大子矩阵

    题目链接 ybt 1224 最大子矩阵 ybt 1282 最大子矩阵 OpenJudge 2 6 1768 最大子矩阵 洛谷 P1719 最大加权矩形 题目考点 1 动态规划 线性动规 最大子段和 2 前缀和 解题思路 求二维最大子矩阵和
  • Android扫描银行卡获取银行卡号

    card io开源的银行卡扫描的三方库真的是很好用啊 首先需要在你的module的gradle的依赖文件中添加依赖 compile io card android sdk 5 5 1 2 清单文件中加入如下Activity
  • 腾讯云Linux服务器如何安装Nginx?(CentOS 8)

    安装及配置 Nginx 执行以下命令 安装 Nginx 说明 本文以安装 Nginx 1 18 0 为例 您可通过 Nginx 官方安装包 获取适用于 CentOS 8的更多版本 dnf y install http nginx org p
  • 跨站请求伪造CSRF(Cross-site request forgery)

    目录 一 什么是CSRF 二 可能存在CSRF攻击的三个条件 一个相关的动作 基于 Cookie 的会话处理 没有不可预测的请求参数 二 常见的CSRF攻击 1 CSRF令牌的验证取决与请求方法 2 CSRF令牌的验证取决与令牌是否存在 3