Django和iOS中的CSRF令牌

时间:2012-11-21 01:29:10

标签: ios django ios6 tastypie django-csrf

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

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

确保我理解正确...是每个用户会话生成的CSRF吗?因此,如果我不使用Cookie,CSRF是不是必要的?

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

谢谢!

2 个答案:

答案 0 :(得分:11)

您说得对:如果您不使用Cookie来管理会话,则不需要CSRF保护。 CSRF之所以有效,是因为会话cookie会自动附加到请求中;访问令牌不是。

我个人认为this article非常有用。这绝对值得一读,可能会回答你的很多问题。

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

对于CSRF令牌,它们也称为会话独立的nonce 。它们是永久性的,但您可能知道cookie是不可能的。无论如何,这意味着CSRF cookie会在会话中持续存在。

答案 1 :(得分:2)

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

我认为Tastypie默认禁用其视图上的CSRF。