问题标签 [protect-from-forgery]

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 回答
1181 浏览

ruby-on-rails - Rails 的protect_from_forgery 真的有用吗?

我问这个是因为当我开始使用 ajax 或 flash 与 rails 通信时,我觉得这让我的生活变得过于复杂。

我知道防止 CSRF 很好,但我不能只检查引用者或其他东西吗?

0 投票
2 回答
4149 浏览

ruby-on-rails - Rails 请求伪造保护设置

请帮助 Rails 中的新手 :) 我在课堂protect_from_forgery上没有任何属性的调用(默认情况下给出) 。ApplicationController

基本上这里的代码:

我认为它应该做的是:它应该防止任何没有正确的 POST 请求authenticity_token。但是当我像下面这样使用 jQuery 发送 post 请求时,它工作正常(在数据库中执行了更新语句)!

我在控制台中看到authenticity_token发送的参数中没有,但请求仍然被认为是有效的。这是为什么?

UPD 在 config/environments/development.rb 中找到配置设置

由于 DEV 环境和本地请求,这些 jQuery post 请求是可以的。

0 投票
1 回答
7078 浏览

php - Rails 3protect_from_forgery 问题

我有两个应用程序需要通过 HTTP 相互通信。一个是 PHP 应用程序,另一个是我的主要应用程序 Rails 应用程序。我需要 PHP 应用程序通过向 Rails 应用程序发送数据来与它通信,但是当我这样做时,我收到 Invalid Authenticity Token 错误。有没有办法解决?或者我将如何创建自己的令牌来传递 POST 以便我的 Rails 应用程序进行身份验证?

0 投票
2 回答
694 浏览

ruby-on-rails - Rails 3、protect_from_forgery 和 IE8 问题

我有一个在所有浏览器(Safari、Firefox、IE6、7、8 等)中都能正常工作的 Rails 应用程序

我有一个新用户拥有相当锁定的 IE8 版本,一旦他们尝试访问该应用程序,甚至在他们进入登录页面之前,他们就会出现 Windows 身份验证提示。如果他们尝试输入已提供的登录详细信息,则会失败。我并不担心它会失败,因为不应该出现身份验证提示。

一旦我从 ApplicationController 中删除了protect_from_forgery,他们就可以正常访问系统。

我曾尝试建议允许 cookie 等,但他们仍然遇到问题。有没有人对我们可以看的其他东西有任何建议

只是为了补充这一点。该站点使用大本营风格的子域系统。不确定这是否是一个问题。

0 投票
1 回答
1538 浏览

ruby-on-rails - protect_from_forgery 不保护 PUT/DELETE 请求

我制作了一个演示应用程序,rails new demo然后生成了一个脚手架用户控制器rails generate scaffold User name:string email:string。脚手架的代码有一个ApplicationControllerwith protect_from_forgeryUserController它派生自ApplicationController.

我运行 webrick,添加用户,很酷。真实性令牌与 /users 上的 POST 一起使用。

然而,仍然使用 Rails 3.0.5 我能够做到:

并在不提供令牌的情况下修改用户 3:

我也可以用 DELETE 做同样的事情:

这给了我:

您能否向我解释一下,当我从不随这些请求发送任何令牌时,为什么我可以做这些事情?

0 投票
3 回答
15777 浏览

ruby-on-rails - 如何仅针对 json 关闭 railsprotect_from_forgery 过滤器

我有使用 Rails3 构建的网站,现在我想为移动客户端访问实现 json API。但是,由于protect_from_forgery 过滤器,从客户端发送json post 请求。因为客户端不会从服务器检索任何数据,所以客户端无法接收 auth_token 所以我想只为 json 请求关闭protect_from_forgery选项(我认为rails3默认会这样做,但显然它没有) .

我知道在这里讨论了类似的主题,但在这种情况下,他在发送发布请求之前收到 auth_token。

所以我的问题是只为json关闭protect_from_forgery是这样做的好方法吗?如果是,该怎么做?如果不是,有什么替代方案?

仅供参考,我使用以下 ajax 请求

我得到 ActionController::InvalidAuthenticityToken 错误。

顺便说一句,以下 curl 命令虽然有效......

0 投票
1 回答
324 浏览

ruby-on-rails - 部署后 Authencity Token 无效

每当我部署新版本的 Rails 应用程序时,前一个版本的真实性令牌就会失效。这是正常的行为。我不想改变这一点。

但是,任何在上一个版本上仍然打开页面的用户,如果他们尝试执行发布请求,将会收到无效令牌错误。

我能做些什么来阻止他们收到这个错误?

0 投票
2 回答
2202 浏览

ruby-on-rails - Rails 3 protect_from_forgery 无法正常工作?

我正在使用protect_from_forgery默认情况下在 application_controller.rb 中的 Rails 3.0.2。

我想触发一个InvalidAuthenticityToken.
为此,我已将此 javascript 添加到我的页面:

使用 Firebug 检查 DOM 我看到authenticity_token隐藏字段已正确更新。

如果我提交表单并检查来自服务器的日志,我会看到相关参数正确设置为“aaa”。我希望得到一段InvalidAuthenticityToken时间的处理请求,因为它是正确的!

这怎么可能?

0 投票
1 回答
1695 浏览

ruby-on-rails - 从浏览器外部到 Rails 服务器的请求的 CSRF 令牌问题

我需要POST从浏览器外部发出 HTTP 请求,但 Rails 后端不接受身份验证(错误 401)。我知道在这种情况下我需要传递一个 CSRF 令牌,但它不起作用。

当我通过浏览器上的表单发出请求时,它按预期工作,但是当我尝试从浏览器外部(例如使用 curl)模拟相同的请求(在标头和 cookie 方面)时,身份验证不会不工作。

两个小的改变让我在没有浏览器的情况下成功:(1)关闭protect_from_forgery,它验证 CSRF 或(2)使用GET而不是POST请求。在这两种情况下,传递 cookie 就足够了。这意味着问题肯定与 CSRF 相关。

所以,我的问题是:如何在POST不使用浏览器的情况下将受 CSRF 保护的 HTTP 发送到 Rails 服务器?

为了澄清,该过程分为三个步骤:

  1. Login:返回一个cookie来标识会话;

  2. :一个GET返回 CSRF 令牌以供以后使用的请求(使用 cookie);

  3. 创建POST提交我要创建的信息的请求(使用会话 cookie 和 CSRF 令牌)。

唯一失败的是第三步。

0 投票
1 回答
305 浏览

ruby-on-rails-3.1 - Rails CSFR 保护:写 before_filter 是否正确?

我的应用程序控制器如下所示:

如果没有 check_csrf,Rails 会在错误响应时向服务器控制台写入警告,然后像往常一样继续执行。所以我不得不编写自己的 check_csrf。现在它工作正常。这是正确的吗?有没有更简单的方法来停止执行错误请求?

导轨版本:3.1。