了解适用于iOS应用的CSRF令牌

时间:2014-07-30 00:41:36

标签: ruby-on-rails afnetworking

我正在为RoR api开发一个iOS应用程序(我的同事制作了它)。我正在尝试开发登录部分,但在POSTMan中测试api时,我注意到它需要一个CSRF令牌。有没有办法绕过api调用来获取CSRF?

旁注:我正在使用AFNetworking 2.0

2 个答案:

答案 0 :(得分:2)

您可以做几件事:

  1. 您可以在发布帖子之前启动GET请求,并检索会话CSRF令牌。然后提交带有authenticity_token参数的POST表单作为正确的CSRF令牌。您可以使用rails helper form_authenticity_token将原始令牌嵌入到视图中的任何位置,或者从注册表单的隐藏标记中获取它。 (这是我最喜欢的选择)
  2. 您可以在您的网站上进行辅助登录操作,这实际上是一个GET请求。在此处绕过CRSF令牌并不太危险,因为任何人都应该有权登录。这样做的好处是可以保留CRSF以执行您可能需要的任何其他操作,但它不适用于需要更高安全性的操作。
  3. 您可以将iOS页面包含在UIWebView中。我不确定这是否符合您的需求,但它会有正确的CSRF令牌,您可以在提交后删除UIWebView。它有点像选项1,但更笨重。
  4. 祝你好运!

答案 1 :(得分:0)

最简单的修复方法是将服务器端更改为不对CSRF令牌进行身份验证。以下是为API使用不同控制器的示例。

class Api::BaseController < ApplicationController
  skip_before_filter :verify_authenticity_token
end

一般情况下,您的API要么要求对API调用进行身份验证(在这种情况下您应该拥有自己的身份验证,OAuth或任意数量的身份验证机制),要么不是(在这种情况下,它是可公开访问的) API和CSRF无关紧要)。还有一些其他线程herehere可以讨论它。

来自another answer on SO (go upvote it!)

CSRF attacks rely on cookies being implicitly sent with all requests to a particular domain. If your API endpoints do not allow cookie-based authentication, you should be good.