问题标签 [csrf-protection]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
1384 浏览

ruby-on-rails-3.2 - 静态页面上的 CSRF 保护

我有一个有表格的静态网站。表单提交到 Rails 端点,该端点捕获提交的数据。静态站点和 Rails 端点在同一个域上,在不同的子域上,所有流量都完全在 HTTPS 上。

我了解 Rails CSRF 如何用于服务器生成的表单。但就我而言,这些表单位于静态 HTML 页面上。我知道所有请求标头都可以伪造,所以不能依赖它。

如果在这种情况下不可能有一个强有力的解决方案,那么我的最后一个选择是转向服务器生成的表单(我现在想避免)。

任何有关解决此问题的好方法的建议都将受到欢迎。或任何指向已经执行此操作的系统或库的指针。

谢谢

0 投票
1 回答
370 浏览

symfony - Symfony 2 CSFR 保护和主干应用

我在 Symfony 2 上有一个 CRUD 控制器。我想为这个控制器制作一个主干应用程序包装器。但是在应用的逻辑中存在一个问题:“如何对主干表单应用实现 CSRF 保护?”

我看到了几种方法:

  1. 在生成表单之前请求令牌。
  2. 生成包含标记的下划线模板。
  3. 在 Symfony 中禁用保护并发明你的自行车。

我很高兴您能帮助我选择正确的解决方案来解决问题。

0 投票
1 回答
926 浏览

java - CSRF 保护:为每个请求发送 CSRF 令牌的方法

我的初始代码为可能改变数据库状态的请求生成了令牌,例如 CRUD 操作。为每个请求生成令牌。与其他数据一起以 JSON 格式发送到客户端,我希望这个令牌与请求一起返回,并在请求完成后更改它。但是,当我只将它实现到我的部分代码(CRUD 操作)时,我被告知要重做它并使其成为网络应用程序范围。我认为最好的方法是使用过滤器。

我的问题是,如何让客户端为每个请求发送“令牌”?我是否将其设置在 cookie 中?我有哪些选择?请指教。

0 投票
1 回答
2804 浏览

symfony-forms - 在 Symfony2.1 中手动更改或捕获无效 CSRF 令牌的消息

我正在使用Symfony2.1。它对表单具有内置的CSRF 保护。CSRF token 无效时返回的错误信息是:“ The CSRF token is invalid. Please try resubmit the form ”。

我使用经典调用将其显示在我的 Twig 模板中的表单顶部:

如何更改返回的消息?

或者,更高级的可能性是捕获此错误类型,以便在我的 Twig 模板中显示大量选项/链接。任何想法?

0 投票
1 回答
3302 浏览

security - YII 框架中的 CSRF 代币多久更换一次?

我最近阅读了有关 csrf 令牌的信息。我正在使用 YII 框架来开发我的项目。我在 config/main.php 中启用了 csrf 验证,yii 将令牌放入隐藏的表单字段中。并检查令牌是否有效。一切安好。但是我观察到,当我刷新并且页面中的所有表单都使用相同的令牌时,CSRF 令牌的值并没有改变。

这让我很困惑。如果 csrf 令牌没有改变,那么任何黑客都可以在他的请求中使用该令牌,并且能够产生一个有效的请求。那么 csrf 令牌如何提供安全性呢?YII框架有问题吗?还是我错过了什么?我希望我确实错过了一些东西。如果我们必须手动生成令牌,请告诉我如何生成和验证(最好在 YII 框架中)

0 投票
1 回答
173 浏览

csrf - CSRF、javascript 和 jquery

CSRF 攻击是否有可能读取受害者浏览器上已经存在的全局 JavaScript 变量的内容?

我的计划是让应用程序存储一个 CSRFToken 值,该值在用户成功登录时存储在会话中,然后我将其保存在一个全局可访问的 JavaScript 变量中以供应用程序使用。我将使用 jQuery 自动将此值附加到应用程序中的任何表单发布操作。在服务器端,我将检查值是否匹配,如果未找到匹配项,则完成操作或阻止它。

我的理解是,可以通过多种方法部署 CSRF 攻击,但它们都需要将受害者重定向到 3rd 方站点以执行恶意代码。例如,第 3 方站点可以尝试伪造表单请求,但除非他们知道 CSRFToken 的内容,否则该操作将失败。除非当然..他们可以以某种方式得到它。这可能吗?

0 投票
1 回答
9739 浏览

codeigniter - 如何通过 Knockout postJson 函数调用避免“不允许您请求的操作”错误

CodeIgniter 给出错误“不允许您请求的操作”。当它未能通过 CSRF 检查时。据我了解,这意味着 POST 缺少表单中的隐藏令牌,证明没有进行攻击。

令牌是通过调用 CI form_open 函数自动生成的。

就我而言,我使用 Knockout 发布 ViewModel 的内容以进行保存,如下所示:

我在其他地方找到了简单地关闭特定页面的 CSRF 设置的解决方案,但这似乎不是一个好的解决方案。

大概是因为没有收到令牌,所以 postJson 调用没有提交现有的表单。有没有办法将所需的令牌与 JSON 数据一起提交,或者将 JSON 数据与现有表单一起提交?

0 投票
2 回答
1586 浏览

php - Zend Framework 2 - CSRF 令牌服务器端验证

我想到了以下问题:我构建了某种通用字段集,我想在所有标准表单中使用它。它包含一个CSRF-Token和一个Submit-Button

它在客户端工作得很好。但我想知道:如果我使用它Zend\Form\Element\Csrf,我的逻辑在哪里可以在服务器端证明这个令牌是可以的。或者这是由Zend后台某处处理的?

谢谢!

0 投票
2 回答
929 浏览

php - Web 表单 BOT 保护对用户透明

过去几天我一直在思考如何保护 Bots 使用的 Web 表单。使用是善意的滥用,大约 8 小时内大约 800k 机器人的查询。

让我们快速概述一下情况,任何缺失的信息 - 请询问。

机器人:

  1. 该机器人具有不同的 IP。
  2. 该机器人将其用户代理更改为真正存在的用户代理。
  3. bot是否加载js并有cookie的未知点。

问题:

  1. 该表单无法使用隐藏的令牌字段,因为它可能是从外部资源提交的。不同网站等资源,不了解 CSRF 令牌,无法生成它们。使得无法使用 CSRF。
  2. 该网站必须在浏览器中缓存,并且缓存可能仅在异常情况下重置,例如可疑行为。
  3. 不能大量使用数据库(!)。

现在的样子:

  1. 具有过期哈希的 Cookie 计数器 + 附加字符只有系统知道它们何时插入。
  2. 如果浏览器无法处理 cookie,则使用数据库日志记录。这是浏览器缓存的一些困难,当用户没有到达服务器时 - 结果:验证没有运行,计数器没有增加。
  3. reCaptcha 为在 X 时间内超过尝试次数限制的用户申请。

提出的想法:

  1. 为 iframe 提供一些内容并过期 0。 iframe 制作简单的 cookie 逻辑。
  2. iframe : 如果 cookie 没有设置 - 设置它,如果 cookie 被设置,验证。如果用户没有超过限制 - 设置计数器 +1,如果超过 - 发送到特定页面,这将显示缓存重置的警告。

这里的困难是,如果 bot 不支持 cookie 和从缓存中提供的内容怎么办......由于用户没有到达服务器,数据库不会写任何东西。但是,如果用户更改关键字,它将重置缓存并且后面的逻辑将起作用。

第二个难点:如果bot不支持JS怎么办(切换关键字会被淘汰)。但是,从缓存提供内容时无法重定向。

第三个难点:如果机器人破译了 ReCAPTCHA 怎么办?:)

*问题:*

在这种情况下你在做什么?请描述您正在考虑的步骤。非常感谢您对事物的看法。每个想法都可能与其他想法一起完善,我们可以提出一个很好的保护方案!谢谢你们!

0 投票
1 回答
1667 浏览

django - django.middleware.csrf.get_token() 用法

考虑以下场景:页面{% csrf_token %}<form>. 稍后此表单的提交(包括隐藏的 csrf_token)使用 ajax(post)执行,无需重新加载页面。
在服务器端,据我所知,令牌应该被发送回客户端并替换其中的那个<form>,因为令牌可以根据其生命周期进行更新(顺便说一下,令牌何时重新生成?
)令牌并发送响应我正在考虑使用 django.middleware.csrf.get_token(),但在代码中它似乎只会返回从客户端发送的那个。
那么 get_token() 会返回最新的吗?