2010-05-06 58 views
12

我在正常使用過程中偶爾會出現這個錯誤,並且我沒有找到一種方法來在不移除需要令牌的屬性的情況下停止它,而我不想這樣做。拋出間歇性錯誤,「未提供所需的防僞標記或無效。」

在我自己的測試過程中(但看似隨機),我已經得到了這個錯誤,並且從我的日誌記錄中知道實際登錄的用戶也正在獲取它。

有沒有人知道什麼會導致antiforgerytoken系統打破(除真正的攻擊之外),以及如何我可以解決這個問題,而不打開我的表單中的安全漏洞?

謝謝!

+0

不熟悉MVC2,但如果它是一個很少見的情況下,我會懷疑該令牌在用戶加載頁面的時間和提交表單之間過期。 – mpen 2010-05-07 00:17:48

+0

馬克 - 我認爲真的可以。如果事實證明是答案,你應該將其作爲答案發布。這不是一個解決方案 - 但它可能是問題所在。我如何處理即將到期的令牌?需要多久才能過期? – 2010-05-07 03:22:01

+0

當使用MVC3和Firefox進行測試時,__RequestVerificationToken_Lw__ cookie在會話結束時過期。我想找到一種方法來強制頁面刷新刷新cookie而不是踢出錯誤。 – 2011-09-26 10:50:09

回答

1

在這裏閱讀部分的限制

prevent cross site request forgery

+0

不,它的設置都正確。這種錯誤很少出現,每週一次左右,偶爾會在嚴重測試期間發生。 – 2010-05-06 23:18:20

+0

謝謝傑森,我會給它一個閱讀。 – 2010-05-07 02:01:40

+0

唯一的想法就是我在那裏看到的與我實現的有什麼不同,他們展示了這個: <%using(Html.Form(「UserProfile」,「SubmitUpdate」)){%> <%= Html .AntiForgeryToken()%> < - 形式的其餘部分放在這裏 - > <% } %> 而我通常實現這一點:! <%使用(的Html.Form( 「用​​戶配置」, 「SubmitUpdate」)){% > <! - 表格的其餘部分放在這裏 - > <%= Html.AntiForgeryToken()%> <% } %> ,因爲這是一種形式後,我沒想到會的問題,我還是不要」噸。但在這一點上,我會改變任何事情,使其工作。 – 2010-05-07 03:18:54

0

確保您的〜/ Web.config中有一個<的machineKey >的部分,您正在設置從節中的關鍵。反XSRF系統要求這樣做。

+0

在我上次嘗試解決此問題期間,我已經完成了此操作。它沒有幫助,但理論上這是一個必要的步驟。感謝 – 2010-05-07 02:01:23

+0

如果您有權訪問計算機的事件日誌,您是否可以檢查與反XSRF無效異常大致同時發生的任何條目?例如,在AppDomain重新啓動等後立即執行這些操作嗎? – Levi 2010-05-07 03:02:37

+1

我會研究這個Levi,另一個有趣的想法。不確定會議過期或appdomain在這一點上重新啓動 - 這兩個建議看起來似乎合理。再次感謝! – 2010-05-07 04:06:40

1

不知道這是否會有所幫助,但我發現使用Internet Explorer時,如果子域內出現下劃線'_',則會出現此錯誤...但不在Firefox上。

仍在尋找解決方案或推理。

+0

謝謝ioSamurai!我從來沒有想到會強調是罪魁禍首。 – Warren 2015-03-09 12:32:19

4

有一點要確認是have the same machine key token for all requests。如果您沒有此應用程序池並且您的應用程序池被回收,則後續使用舊Cookie的POST會導致此錯誤。

另一個原因是有人有隱私設置方式高,從而阻止Cookie。例如,在Internet Explorer的「隱私」選項卡中,如果設置設置爲「高」或「阻止所有Cookie」,則會出現此錯誤。

+0

在Firefox中出現問題。無法解決原因 - 因爲某些原因,所有Cookie都被禁用。我的理論是,我讓他們在Firebug中被禁用(然後我卸載),並且這個設置依然存在。 – 2015-03-18 17:39:51

8

這裏是我的答案的一部分a similar question

計算機密鑰和Cookies:這個問題是醜陋的,容易被發現(導致例外),但不是很直觀。驗證cookie和令牌使用唯一的「機器密鑰」進行編碼和解碼。這意味着如果你有一個服務器場,或者改變你的服務器,你的cookie將不再有效。關閉瀏覽器可以解決問題(因爲cookie是一個會話cookie)。但是,有些人長時間在後臺打開瀏覽器窗口!
解決方案是在您的配置文件中設置「機器密鑰」。這將告訴MVC在所有服務器上使用相同的密鑰,以確保該cookie可在任何地方解密。

請注意:如果用戶保持任何瀏覽器窗口打開,甚至在更改機器密鑰後,他們仍會繼續收到這些錯誤消息!他們必須關閉窗口(清除會話cookie)才能再次訪問您的網站。

+1

這與我有相同的場景,但我已經在我的web.config中使用機器密鑰。另一種想法是,用戶擁有一個未過期的「記住我」功能的Cookie。這個不過期的cookie是否有可能與反僞造標記/請求驗證cookie相關聯,當這個cookie過期時,與「Remember Me」cookie不同? – ganders 2014-11-25 19:27:13

0

正如mpen在答覆的評論中所說的,當用戶離開坐在那裏的頁面超過20分鐘(默認會話時間)並且令牌過期時,我一直都會看到這一點。

可以觸發或者迫使這個錯誤(如果你想測試捕獲它)打開瀏覽器的開發工具和刪除__RequestVerificationToken隱藏字段:

<input name="__RequestVerificationToken" type="hidden" value="AqJL/+e9tGCSCXdurrXDRefVL/TAdOAG9Hjrx0oMPg6sVZY3xv099OSYlH1qI8uZyu4x2xFj9eiNVSH2BGsSfJCQAqzxfQtIKoHXNkkW2FJTkxzsNRkwZo1SJUzYGvcEJ/OJ0AouiUWh98qyIzgN2ZkKP7k="> 
相關問題