2012-01-02 48 views
3

我使用MVC3和Razor視圖引擎。什麼是爲每個用戶生成不同AntiForgeryToken的方法

我需要爲每個用戶生成一個不同的AntiForgeryToken。

我正在考慮生成一個獨特的salt值,並在用戶註冊時將其存儲在用戶表中,並使用該鹽生成令牌,但我怎樣才能將該鹽值繞過屬性ValidateAntiForgeryToken。我想我需要定義一個自定義屬性,但我不知道如何去(通過訪問用戶信息來使用salt值)。

在此先感謝。

+0

難道你只是問一個類似的問題? – 2012-01-02 00:43:33

+0

你沒有真正解釋爲什麼你不能只使用默認機制。 – CodesInChaos 2012-01-02 00:44:04

+1

@MitchWheat不,這是一個不同的問題,讀得很好,我在問不同的事情。你可能注意到,這不是我在SO上的第一天。 – 2012-01-02 00:46:14

回答

6

如果你想要一個不同的鹽,那麼你需要從現有的代碼中滾出你自己的代碼或者想出一個新的方案。

但請記住,這些令牌已經是用戶特定的。有人以用戶A的身份登錄,因此無法使用用戶B的會話中的令牌。

另外請注意,他們不是一次性使用令牌,所以你想在這裏防止什麼?使用戶A無法爲用戶b生成一個?再次記住,用戶a沒有以用戶b的身份登錄,因此如果這是僞造的,那麼當前執行的檢查將失敗。

1

這裏有一個很好的解決方案非常類似的問題:
runtime loading of ValidateAntiForgeryToken Salt value

基本上,你只需要創建一個包裝ValidateAntiForgeryToken屬性的功能,在系統運行時定製的鹽值的屬性。

該解決方案的另一個偉大的事情:該屬性可以應用於控制器級別,自動應用於所有POST方法。

然而,正如其他人所說,在MVC AntiForgeryToken實施已經使用在生成令牌的用戶名,所以除非你有私心,這樣做不會得到你任何東西。

相關問題