在 Rails 3 中关闭 CSRF 令牌

Posted

技术标签:

【中文标题】在 Rails 3 中关闭 CSRF 令牌【英文标题】:Turn off CSRF token in rails 3 【发布时间】:2011-08-05 20:59:10 【问题描述】:

我有一个 Rails 应用程序,它为 iPhone 应用程序提供一些 API。 我希望能够简单地发布资源而不介意获得正确的 CSRF 令牌。 我尝试了一些在 *** 中看到的方法,但它们似乎不再适用于 rails 3。

谢谢你帮助我。

【问题讨论】:

【参考方案1】:

在您要禁用 CSRF 的控制器中检查:

skip_before_action :verify_authenticity_token

或禁用除少数方法之外的所有内容:

skip_before_action :verify_authenticity_token, :except => [:update, :create]

或者只禁用指定的方法:

skip_before_action :verify_authenticity_token, :only => [:custom_auth, :update]

更多信息:RoR Request Forgery Protection

【讨论】:

对于混合了常规浏览器可访问表单和 API 端点的应用程序,这是正确的答案。如果您绝对确定您的应用程序中不会有任何浏览器可访问的表单,那么 Markus Proske 的回答将是正确的。 这到底是哪里去了?如果某个 gem 的控制器部分怎么办? 请问您能否回答这个非常相似的问题? ***.com/questions/50159847/…【参考方案2】:

在 Rails3 中,您可以在控制器中为特定方法禁用 csrf 令牌:

protect_from_forgery :except => :create 

【讨论】:

对于任何阅读的人,请注意这是ApplicationController 中应该包含的内容。 Mike Lewis 在下面的回复 (skip_before_filter :verify_authenticity_token) 是如何在每个控制器的基础上禁用它,假设控制器继承自 ApplicationController 看来这是不安全的***.com/questions/10676018/…。你怎么看?是吗? @NudeCanalTroll 你的意思是把它放在我想要它不起作用的控制器中? 请问您能否回答这个非常相似的问题? ***.com/questions/50159847/…【参考方案3】:

使用 Rails 4,您现在可以选择使用 skip_before_action 而不是 skip_before_filter

# Works in Rails 4 and 5
skip_before_action :verify_authenticity_token

# Works in Rails 3 and 4 (deprecated in Rails 4 and removed in Rails 5)
skip_before_filter :verify_authenticity_token

【讨论】:

有什么区别? 请问您能否回答这个非常相似的问题? ***.com/questions/50159847/… 约翰·萨姆,我有时间会尝试解决它。​​

以上是关于在 Rails 3 中关闭 CSRF 令牌的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Rails 应用程序中关闭 CSRF 保护?

在 Rails 中关闭 json 键引用

如何在 Rails 中关闭 MySQL 严格模式

Rails 3:无法验证 CSRF 令牌的真实性

无法在 SpringBootApplication 中关闭 SecurityConfig

基本 .ajax 发布到 rails 3.2.2 脚手架,生成“警告:无法验证 CSRF 令牌真实性”