2011-02-06 84 views
5

AntiForgeryToken用於防止CSRF攻擊,但是MSDN上的鏈接並沒有讓我對AntiForgeryToken究竟做什麼,或者它如何工作,或者爲什麼事情按照它們的方式完成了很多瞭解。ASP.NET MVC3的AntiForgeryToken的實現細節和基本原理是什麼?

從我收集的內容中,它會在網頁和cookie中創建一個散列。其中一個或兩個人使用散列IPrincipal.Name,並使用對稱加密。

任何人都可以闡明爲:

  1. 的AntiForgeryToken內部是如何工作
  2. 我應該說,它是用來保護
  3. 什麼豈不是用來保護
  4. 什麼是推理在上面#1的實施選擇背後?
    • 例子:
      • 是實現從「DoubleSubmit」餅乾等常見漏洞安全
      • 如果用戶打開多個標籤頁是否存在實施問題
      • 是什麼讓MSFT的實現從一個可在SANS不同這裏
+0

您是否想知道CSRF是什麼?特別是MS如何處理它?或者一般來說你會如何處理它? – CtrlDot 2011-03-23 00:58:45

回答

1

好吧,是我最好的選擇。

1)在內部,mvc使用RNG加密方法創建一個128位字符串作爲XSRF標記。該字符串存儲在cookie中以及表單某處的隱藏字段中。 cookie名稱似乎採用__RequestVerificationToken +應用程序路徑(服務器端)的64位編碼版本的形式。這樣做的HTML部分採用AntiForgeryDataSerializer連載以下數據 片 - 鹽 - 值(標記字符串) - 創建日期 的蜱 - 用戶名(好像Context.User)

的validate方法基本上將cookie中的值和表單的值反序列化,並根據值(salt/value/ticks/username)進行比較。

2/3)我認爲這個討論更多的是什麼時候使用XSRF標記,什麼時候不使用。在我看來,你應該在每一種形式上使用它(我的意思是爲什麼不)。我能想到的唯一不能保護的是,如果你確實碰到了有問題的表單,或者沒有。瞭解應用程序名稱的base64編碼將允許攻擊者在XSRF攻擊期間查看cookie。也許我對此的解釋是不正確的。

4)不確定你在找什麼?我想我會建立一個機制,我會嘗試在會話中存儲XSRF令牌(如果已經有可用的話),如果沒有,那麼嘗試使用cookie方法。至於使用的加密類型,我發現這個SO artcile。 Pros and cons of RNGCryptoServiceProvider