2013-05-04 62 views
9

我正在構建一個與服務器通信以獲取數據的ios應用程序。django csrf用於與ios應用程序兼容的api

如果它只是一個普通的應用程序,我可以通過表單發送csrf標記(因爲全部來自同一個域)。但是,對於iOS應用程序,我不認爲我可以設置csrf令牌。

因此,當從iOS應用程序發送請求到服務器時,我收到有關csrf的錯誤。那麼,這是什麼解決方案?禁用此csrf功能或其他更好的方法?這是我的第一個iOS應用程序,所以請告訴我一個更好的方法,所以我會遵循。

回答

10

對於iOS應用正在訪問的URL(「API端點」),您需要在相應的視圖函數中指定@csrf_exempt來禁用csrf保護。

更多細節在這裏 -https://docs.djangoproject.com/en/dev/ref/contrib/csrf/#django.views.decorators.csrf.csrf_exempt

和保護通過其他身份驗證方法,如會話驗證這些URL。

爲了您的身份驗證目的,您可以輕鬆參考django rest框架和django tastypie所做的工作。兩者都使用SessionAuthentication類來處理身份驗證並保護iOS應用可以連接到的公開URL(API端點)。

參考: -

Django的tastypie也有一個授權類,這是不是與認證相混淆。它還有一個APIKey授權類,當您想將您的django URL暴露給其他第三方開發人員,他們可能想要構建自己的應用程序與您的django URL訪問數據以訪問數據(認爲是「Facebook API」) 。每個第三方開發者實質上都可以提供一個唯一的API,並且由於您擁有提供給每個第三方應用程序的APIKeyAuthorization類和一個唯一的API密鑰,因此您可以確保只有「已授權」的應用程序才能使用您的django URL。這就是「Google+」或「Facebook」等各種大型平臺的工作原理。 Django的CSRF如何工作

https://docs.djangoproject.com/en/dev/ref/contrib/csrf/#how-it-works

的CSRF保護是基於以下幾點

詳情:

被設置爲隨機值

一個CSRF的cookie(會話獨立的 現時,因爲它被稱爲),其他網站將無法訪問。

這個cookie由CsrfViewMiddleware設置。這意味着永久性的, 但由於沒有辦法設置永不過期的cookie,所以在 django.middleware.csrf.get_token()( 內部使用的函數檢索CSRF令牌)。

名爲「csrfmiddlewaretoken」存在於所有 傳出POST形式隱藏的表單字段。此字段的值是CSRF cookie的值。

這部分是由模板標籤完成的。

對於未使用HTTP GET,HEAD,OPTIONS 或TRACE所有傳入請求,一個CSRF餅乾必須存在,而「csrfmiddlewaretoken」 字段必須存在和正確的。如果不是,用戶將得到一個 403錯誤。

該檢查由CsrfViewMiddleware完成。

此外,HTTPS請求,嚴格引薦檢查由 CsrfViewMiddleware完成。由於HTTP'Set-Cookie'標頭爲 (不幸地)被客戶端接受,因此在使用與會話無關的 隨機數時,這對於解決在HTTPS下可能發生的中間人攻擊 是必要的。與網址爲 的HTTPS進行通話。 (Referer的檢查不爲HTTP請求完成,因爲 存在的Referer標頭是不是在HTTP下足夠可靠。)

這確保只有源自你的網站 形式可以用於發佈數據備份。

+0

感謝。 ...... ... +1 – user2349115 2013-05-04 06:47:27