首頁  >  問答  >  主體

了解 CSRF

我不明白使用「挑戰令牌」如何增加任何形式的預防:什麼值應該與什麼進行比較?

來自 OWASP:

一般來說,開發者只需要 產生此令牌一次 目前會話。初始後 該代幣的生成,其值為 儲存在會話中並被使用 對於每個後續請求,直到 會話過期。

如果我正確理解了這個過程,就會發生這樣的情況。

我登入 http://example.com 並建立一個包含此隨機令牌的會話/cookie。然後,每個表單都包含一個隱藏輸入,該輸入還包含來自會話的隨機值,該值在表單提交時與會話/cookie 進行比較。

但這能實現什麼目的呢?您不是只是獲取會話數據,將其放入頁面中,然後將其與完全相同的會話數據進行比較嗎?看起來像是循環推理。這些文章一直在談論遵循“同源策略”,但這沒有任何意義,因為所有 CSRF 攻擊都與用戶同源,只是欺騙用戶做出他/她不希望的操作。

除了將令牌作為查詢字串附加到每個 URL 之外,還有其他選擇嗎?看起來非常醜陋且不切實際,並且使用戶更難添加書籤。

P粉056618053P粉056618053332 天前620

全部回覆(2)我來回復

  • P粉794851975

    P粉7948519752023-10-24 11:47:30

    CSRF 透過類比解釋 - 範例:

    • 您用鑰匙打開家的前門。
    • 進去之前,先與鄰居交談
    • 當您正在進行此對話時,請在門未鎖的情況下走進去。
    • 他們進去了,假裝是你!
    • 你家裡的人沒有註意到任何不同 - 你的妻子就像是,「哦,混蛋*,他在家」。

    冒充者拿走了你所有的錢,也許在出去的時候玩了一些 Xbox......

    摘要

    CSRF 基本上依賴於這樣一個事實:您打開了家門,然後將其打開,讓其他人可以簡單地走進來並假裝是您。

    如何解決這個問題?

    當您第一次打開家門時,門衛會給您一張紙,上面寫著一個很長且非常隨機的數字:

    現在,如果你想進入自己的房子,你必須向門衛出示那張紙才能進去。

    所以現在當冒充者試圖進入你的房子時,警衛會問:

    「紙上寫的隨機數是多少?」

    如果冒充者沒有正確的數字,那麼他就無法進入。要嘛他必須正確猜測隨機數 - 這是一項非常困難的任務。更糟的是,隨機數的有效期限只有 20 分鐘(例如)。所以知道模仿者必須猜對,不只如此,他只有20分鐘的時間才能得到正確答案。這實在是太費勁了!所以他放棄了。

    當然,這個類比有點牽強,但我希望它對你有幫助。

    **crud =(建立、讀取、更新刪除)

    回覆
    0
  • P粉121081658

    P粉1210816582023-10-24 00:28:04

    攻擊者無法取得令牌。因此請求不會生效。

    我推薦 Gnucitizen 的這篇文章。它有一個相當不錯的 CSRF 解釋: http://www.gnucitizen.org/blog/csrf-揭秘/

    #

    回覆
    0
  • 取消回覆