處於餅乾初學者,CSRF和Django的(使用1.4),從我可以做出來,這是它是如何工作的,請大家指正我走到哪裏錯了...Django的CSRF保護是如何工作的?
以下適用其中django.middleware。 csrf.CsrfViewMiddleware包含在MIDDLEWARE_CLASSES元組中。
如果POST表單包含csrf_token
標記,並且有關視圖將RequestContext
傳遞給模板,則請求頁面意味着Django包含一個隱藏表單域,其中包含字母數字字符串。 Django還會向瀏覽器返回一個名稱設置爲csrftoken
的cookie,並將值設置爲相同的字母數字字符串。
當接收到表單提交時,Django檢查來自隱藏表單字段的字母數字字符串值和從瀏覽器接收到的csrftoken cookie。如果它們不匹配,則發出403響應。
CSRF攻擊可能以包含iframe的惡意網站的形式出現。 iframe包含一個POST表單和一些JavaScript。表單的action
屬性指向我的Django站點。該表單旨在在我的網站上做一些令人討厭的事情,並且JS在加載iframe時提交表單。
瀏覽器將在表單提交的標題中包含csrftoken
cookie。但是,表單不包含匹配字母數字字符串的隱藏字段,因此將返回403並且攻擊失敗。如果iframe JS嘗試訪問cookie,以便創建正確的隱藏表單域,瀏覽器將阻止它進行此操作。
這是正確的嗎?
我沒有看到任何錯誤。也許別人會,但總的來說,你明白了。 – Zashas 2012-07-24 18:21:33