当前位置: 首页 > 知识库问答 >
问题:

混淆CSRF保护策略

殳智志
2023-03-14

我正在测试一个web应用程序。CSRF在cookies和标头中应用和发送,但不是以隐藏输入的形式。csrf令牌不会针对每个请求更改,但会在会话期间更改。csrf令牌应多久更改一次?它应该根据会话或请求进行更改吗?客户端或服务器应该设置csrf令牌吗?应用csrf保护的最佳策略是什么?双重提交cookie?三重提交Cookie?还是其他新策略?

共有1个答案

夏弘义
2023-03-14

我只想在这里一个接一个地回答你的问题。

CSRF令牌应该多久更改一次?

您可以在每个会话中更改一次CSRF令牌。每个请求更改一次不会带来真正的安全优势,如果有的话,这只是浪费资源和限制可用性的一种简单方法。例如,用户将无法点击“后退”按钮,因为他们将拥有过时的CSRF令牌,或者如果他们尝试使用新值重新提交表单(例如在验证错误后),表单可能不会发送。

它应该根据会话或请求进行更改吗?

如前所述,它应该在每个会话中更改。只有在登录时,用户才能在每个请求中获得新令牌。这是为了防止会话固定攻击导致CSRF攻击的可能性。

例如:攻击者访问站点并生成新会话。他们获取会话ID并将其注入到受害者的浏览器中(例如,通过从易受攻击的邻居域写入cookie,或使用另一个漏洞,如jesssionid URL),并将CSRF令牌注入到受害者浏览器中的表单中。他们等待受害者使用该表单登录,然后使用另一个表单帖子让受害者使用仍然有效的CSRF令牌执行操作。

为了防止这种情况,请使CSRF令牌无效,并在您已经对会话ID执行相同操作的地方(如登录)发布一个新令牌,以防止会话固定攻击。

客户端或服务器应该设置CSRF令牌吗?

服务器-始终在服务器上!您希望根据OWASP指南从可信源生成令牌。这可以确保您确切地知道令牌是在哪里生成的,并限制攻击面,因为攻击者无法html" target="_blank">控制服务器上发生的事情。

应用CSRF保护的最佳策略是什么?

我认为CSRF是一个非常深入的话题,不能用几句话来概括。这是一个小的研究和阅读可以走很长的路。我建议您查看OWASP CSRF预防备忘单。

 类似资料:
  • 问题内容: 我想制作一个不是开源的JavaScript应用程序,因此我想学习如何混淆我的JS代码?这可能吗? 问题答案: 可以使用: Google Closure编译器 UglifyJS 更新:这个问题最初是在10多年前提出的,并且不再维护YUI。 Google Closure编译器仍在使用,并且UglifyJS可以通过节点包管理器在本地运行: 私有字符串数据: 将字符串值设为私有是另一个问题,而

  • CSRF是指针对Web应用程序的跨站点伪造攻击。 CSRF攻击是系统的经过身份验证的用户执行的未授权活动。 因此,许多Web应用程序容易受到这些攻击。 Laravel以下列方式提供CSRF保护 - Laravel包含一个内置的CSRF插件,可为每个活动用户会话生成令牌。 这些令牌验证相关的经过身份验证的用户是否发送了操作或请求。 实现 (Implementation) 本节将详细讨论Laravel

  • 简介 Laravel 可以轻松地保护应用程序免受 跨站点请求伪造 (CSRF) 攻击,跨站点请求伪造是一种恶意攻击,它凭借已通过身份验证的用户身份来运行未经过授权的命令。 Laravel 会自动为每个活跃用户的会话生成一个 CSRF「令牌」。该令牌用于验证经过身份验证的用户是否是向应用程序发出请求的用户。 无论何时,当您在应用程序中定义HTML表单时,都应该在表单中包含一个隐藏的CSRF标记字段,

  • 我目前添加了一个CSRF令牌保护机制到我的php应用程序。正如我所读到的,唯一的要求是一个独特的每个用户令牌,我在php7中使用random_bytes生成。 我担心的是,如果攻击者使用用户的浏览器发送http请求,浏览器不会发送令牌的会话变量吗?(因为用户具有与令牌关联的sessionid)。 我将令牌存储在会话变量的一个隐藏值内。 例如:我的令牌存储在会话变量中,然后攻击者将我发送到具有csr

  • 我正试图用crsf令牌保护我的Zend表单。如果我在表单中添加token元素,它总是会向我返回notEmpty错误消息。我做错什么了吗?谢谢 控制器中的操作: 在我看来,我呈现表单并转储错误消息 每次验证表单后,我都会收到如下错误消息: 如果我给元素填充了正确的值,最后一个错误总是token-NotEmpty,因此我的表单永远无效。

  • 目前我尝试使用Zend Framework 2的CSRF保护。 但每次我发送表单时,都会收到以下错误消息: 提交的表格不是来自预期的网站 我以这种方式实施了CSRF保护: 1)创建了一个Form Class并添加了csrf: 2)在view文件中呼应csrf元素: 我发现csrf令牌没有存储在会话中,但是为什么呢?