2012-11-21 67 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通過會話持續存在。