警告:在API开发的情况下无法验证CSRF令牌的真实性

gip*_*any 49 ruby api csrf token ruby-on-rails-3

我现在正在使用Ruby on Rails 开发Web API.当Rails应用程序收到没有任何csrf令牌的POST请求时,将发生以下错误消息.因为该应用没有视图.

WARNING: Can't verify CSRF token authenticity
Run Code Online (Sandbox Code Playgroud)

所以我的问题是如何在这种情况下安全地逃避csrf令牌检查?

非常感谢你提前.

Kus*_*lla 67

您可以通过添加来完成此操作

skip_before_filter  :verify_authenticity_token
Run Code Online (Sandbox Code Playgroud)

到您的控制器.这样,对控制器的所有传入请求都会跳过:verify_authenticity_token过滤器.

  • 这个解决方案的任何缺点?这是API的默认设置吗?在application_controller中有一个API"提示":`#对于API,您可能希望使用:null_session. (3认同)
  • 对于与Rails视图绑定的JSON API,我建议您使用CSRF保护.但是对于移动客户端或与Rails应用程序分开的其他应用程序所使用的API,应该关闭它. (3认同)
  • 是的,如果您的应用程序仅在浏览器中运行,则删除此选项将允许CROSS-SITE-REQUEST-FORGERY http://en.wikipedia.org/wiki/Cross-site_request_forgery (2认同)

Bry*_*mas 20

对于轨道4应该是

skip_before_action :verify_authenticity_token, only: [:one_or_two_actions_here]
Run Code Online (Sandbox Code Playgroud)

请注意,您应该避免在控制器的所有操作上跳过verify_authenticity_token,而是使用该选项only仅跳过您需要的位置.查看文档