閱讀本section of the Django docs他們建議在cookie設置csrftoken並具有客戶端框架把這個將在服務器端請求驗證的標頭。但是,cookie中沒有令牌會破壞目的,因爲cookie是根據每個用戶的請求發送的?不明白Django的CSRF保護是如何工作的
或者是Django在頭文件中檢查該值的「安全性」,而不是檢查cookie值本身?
我不明白爲什麼這個工程的同步提交,但在這種情況下,csrftoken被直接寫入頁面,而不是存儲在cookie中,這似乎更安全。
從OWASP page on reviewing code for CSRF:
檢查,如果要求有一個有效的會話cookie是不夠的,我們需要 檢查,如果一個唯一的標識符與每個HTTP請求發送出去的 到應用程序。 CSRF請求將不具有此有效唯一 標識符。其理由CSRF請求將不會有這種獨特的請求 標識符的唯一ID被呈現作爲隱藏字段 在頁面上,被附加到一次鏈接/按鈕壓機 選擇的HTTP請求。攻擊者將不知道這個唯一的ID,因爲它是隨機的,並且每個鏈接每頁都動態呈現。
「令牌始終在cookie中」不正確。另外,正常形式(不通過ajax發送)必須在隱藏輸入字段中包含csrf標記。 –
我從OWASP頁面瞭解到,Cookie不是處理這個問題的好方法,因爲它們會自動爲域設置。所以,如果我讓你點擊www.socialnetwork.com/myAccount/delete,你的cookies將被髮送,就像每個www.socialnetwork.com請求發送一樣。 你是說在一個頭部而不是cookie中檢查csrftoken的行爲是什麼使得這是一種可行的方法? – diplosaurus
@AntonBessonov CSRF保護通過將cookie與頭部/隱藏輸入進行比較來工作。如果沒有利用其他漏洞(如XSS),潛在的攻擊者無法從Cookie獲得正確的值,所以在發生攻擊時,頭/隱藏輸入中的CSRF令牌將不具有與cookie相同的值。當這些值不匹配時,請求被拒絕。然而,爲了這個工作,令牌必須始終設置在cookie中。 – knbk