2012-11-21 65 views
11

所以我想明白在这里做什么......我正在做一个POST调用从我的Django服务器从iOS和我不断收到403错误(无效的CSRF令牌)。我正在考虑实现一个函数,它将返回令牌(您将需要登录才能访问该函数),然后将该令牌添加到我的POST调用中。在Django和iOS的CSRF令牌

现在......我不明白这是什么意思?如果我使用TastyPie并且所需的登录名是APIKey ...我应该只是免除csrf检查?

为了确保我理解了正确的东西......是每个用户会话生成的CSRF?因此,如果我不使用Cookies,CSRF是没有必要的?

人们通常如何使用他们的Django服务器与iOS并进行此类POST调用?

谢谢!

回答

2

你说得对,在这种情况下CSRF没有什么意义,因为它的目的是保护用户免受浏览器中的数据篡改。

我相信默认情况下,Tastypie在其视图上禁用了CSRF。

11

你是对的:如果你不使用cookies来管理你的会话,你不需要CSRF保护。 CSRF的工作原理是因为会话cookie自动附加到请求中;访问令牌不是。

我个人发现this article非常有用。这绝对值得阅读,并且可能会回答你很多问题。

至于ttyypie:它允许SessionAuthentication。如果您允许在tastypie中进行会话身份验证,我建议您研究一种方法来保护用户免受CSRF攻击。对于其他验证方案,这似乎不是必要的。据我所知,德米特里是默认禁用CSRF的tastypie,这意味着很奇怪你会得到403错误。也许还有其他事情正在发生。尝试将视图包装在@csrf_exempt中。

对于CSRF令牌,它们也被称为会话独立随机数。他们的目的是永久性的,但你可能知道这是不可能的饼干。无论如何,这意味着CSRF cookies通过会话持续存在。