我使用jQuery來做一個AJAX POST,但得到一個CSRF錯誤。我認爲這是因爲CSRF cookie不會發送給客戶端發回。有沒有一種方法可以在Django 1.0中解決這個問題?如何在沒有跨站點請求僞造錯誤的情況下在Django 1.0中執行AJAX POST?
回答
Yuji的建議指出了我的正確方向。
我正在做一個視圖的AJAX POST,這是一個GET的結果,因此Django中間件沒有生成任何csrf標記。
我使用在csrf中間件(/usr/lib/python2.5/site-packages/django/contrib/csrf/middleware.py)中找到的代碼來生成一個csrf標記,並使用GET上下文發送它。現在,由於令牌存在,AJAX POST正常工作。
要創建CSRF令牌:
def csrf_token_create(request):
from django.contrib.csrf.middleware import _make_token
try:
session_id = request.COOKIES[settings.SESSION_COOKIE_NAME]
except KeyError:
# No session, no check required
return None
csrf_token = _make_token(session_id)
return csrf_token
在視圖上下文:
csrf_token = csrf_token_create(request)
return render_to_response('view.html', {'csrfmiddlewaretoken': csrf_token})
添加一個隱藏的輸入csrfmiddlewaretoken在HTML模板。
如果可以,請接受此爲正確答案。如果您有任何代碼可能對將來的人有用,那麼您應該編輯您的帖子並將其包含在內,如果可以的話:) – 2012-03-28 01:57:15
我已經添加了代碼。 – Mitch 2012-03-29 00:45:57
django 1.4的文檔有你的代碼。 https://docs.djangoproject.com/en/1.4/ref/contrib/csrf/
我可能認爲這也適用於django 1.0,因爲你要做的代碼基本上只是將jquery函數添加到您的頁面加載的任何js文件。 對於1.4版本,我們必須在django模板中的表單元素內添加{%csrf_token%}標籤。試試這個吧!
- 1. 如何通過Ajax post防止跨站點請求僞造?
- 2. REST和CSRF(跨站點請求僞造)
- 3. 防止跨站點請求僞造
- 4. 跨站點請求僞造(CSRF)緩解
- 5. 跨網站請求僞造
- 6. 跨域請求在沒有CORS的情況下進行
- 7. CSRF(跨站請求僞造)在PHP
- 8. 如何在沒有Ajax的情況下觸發HTTP PUT請求?
- 9. 使得跨站請求僞造Rails中
- 10. Django中的跨站請求僞造問題
- 11. 如何在沒有Ajax請求的情況下加載jqGrid?
- 12. 如何在沒有jQuery的情況下使用ajax請求
- 13. 如何在啓用AntiForgeryToken的情況下允許跨站點請求
- 14. 如何在不使用Json的情況下在android中執行HTTP POST請求
- 15. java - 我如何防止跨站點僞造請求
- 16. android在沒有AsyncTask的情況下執行HTTP請求?
- 17. 在沒有WSDL的情況下執行Saber SOAP請求
- 18. asp.net和跨站請求僞造
- 19. 如何在沒有Ajax請求的情況下展開樹節點?
- 20. 在沒有表單元素的情況下在Django中使用ajax請求
- 21. 防止Liferay中的跨站點請求僞造
- 22. 跨站點AJAX請求
- 23. TYPO3中的跨站點請求僞造(CSRF)保護
- 24. 在沒有請求對象的情況下使用django login()
- 25. 如何在沒有mecache的情況下並行請求PHP?
- 26. 僞造的HTTP POST請求
- 27. 在沒有proxy_pass的情況下使用Nginx服務Django站點
- 28. Django管理形式可以跨站請求僞造(CSRF)
- 29. GDB如何在沒有斷點的情況下停止執行?
- 30. django在外鍵的情況下請求
手動添加令牌到ajax post參數 - 這是最簡單的方法。我忘記了1.0的令牌生成函數的確切位置(從1.0開始,csrf已經移動了很多),但它不應該很難找到!例如在1.3中,RequestContext自動具有一個名爲'csrf_token'的變量,它是標記字符串(不要與標記混淆)。 – 2012-03-28 00:17:04
[Django CSRF檢查與Ajax POST請求失敗]的可能重複(http://stackoverflow.com/questions/5100539/django-csrf-check-failing-with-an-ajax-post-request) – 2012-03-28 06:14:28
這可以'是Django 1.0,它沒有CSRF保護。 – 2012-03-28 06:52:37