我不明白使用「挑戰(zhàn)令牌」如何增加任何形式的預(yù)防:什麼值應(yīng)該與什麼進行比較?
來自 OWASP:
一般來說,開發(fā)者只需要 產(chǎn)生此令牌一次 目前會話。初始後 該代幣的生成,其值為 儲存在會話中並被使用 對於每個後續(xù)請求,直到 會話過期。
如果我正確理解了這個過程,就會發(fā)生這樣的情況。
我登入 http://example.com 並建立一個包含此隨機令牌的會話/cookie。然後,每個表單都包含一個隱藏輸入,該輸入還包含來自會話的隨機值,該值在表單提交時與會話/cookie 進行比較。
但這能實現(xiàn)什麼目的呢?您不是只是獲取會話數(shù)據(jù),將其放入頁面中,然後將其與完全相同的會話數(shù)據(jù)進行比較嗎?看起來像是循環(huán)推理。這些文章一直在談?wù)撟裱巴床呗浴保@沒有任何意義,因為所有 CSRF 攻擊都與用戶同源,只是欺騙用戶做出他/她不希望的操作。
除了將令牌作為查詢字串附加到每個 URL 之外,還有其他選擇嗎?看起來非常醜陋且不切實際,並且使用戶更難添加書籤。
冒充者拿走了你所有的錢,也許在出去的時候玩了一些 Xbox......
CSRF 基本上依賴於這樣一個事實:您打開了家門,然後將其打開,讓其他人可以簡單地走進來並假裝是您。
當(dāng)您第一次打開家門時,門衛(wèi)會給您一張紙,上面寫著一個很長且非常隨機的數(shù)字:
現(xiàn)在,如果你想進入自己的房子,你必須向門衛(wèi)出示那張紙才能進去。
所以現(xiàn)在當(dāng)冒充者試圖進入你的房子時,警衛(wèi)會問:
「紙上寫的隨機數(shù)是多少?」
如果冒充者沒有正確的數(shù)字,那麼他就無法進入。要嘛他必須正確猜測隨機數(shù) - 這是一項非常困難的任務(wù)。更糟的是,隨機數(shù)的有效期限只有 20 分鐘(例如)。所以知道模仿者必須猜對,不只如此,他只有20分鐘的時間才能得到正確答案。這實在是太費勁了!所以他放棄了。
當(dāng)然,這個類比有點牽強,但我希望它對你有幫助。
**crud =(建立、讀取、更新刪除)
攻擊者無法取得令牌。因此請求不會生效。
我推薦 Gnucitizen 的這篇文章。它有一個相當(dāng)不錯的 CSRF 解釋: http://www.gnucitizen.org/blog/csrf-揭秘/
#