我已經使用MVC 5中的ValidateAntiForgeryTokenAttribute實現了防僞保護。它工作正常,但將來我們可能會轉向更多的「網絡農場」方法來託管。如果我在開發中運行應用程序並轉到表單,請重新啓動Web服務器(通過在Visual Studio中重新啓動應用程序),然後提交表單,但不會拋出System.Web.Mvc.HttpAntiForgeryException。在Web服務器重新啓動之間,MVC反僞造令牌如何生存?
我們的應用程序不使用任何其他會話狀態。有人可以幫助我理解我的服務器如何從停止的位置獲取?我沒有在我的web.config或我能找到的其他地方定義machineKey。它與在開發環境中運行有關嗎?
我唯一可以找到的參考是早期版本的MVC,所以我想知道現在是否以不同的方式解決了這個問題。
我很高興這個功能有效,但我需要理解爲什麼。
謝謝你。我知道這兩個值是比較的,但我認爲用於解密值的加密密鑰應該在重新啓動IIS時重新生成。因爲密鑰是新的,所以它不應該能夠解密值。 – DustinA
啊,我明白你在問什麼了。很好的問題。我會更新我的答案。 –
我很欣賞你寫這個答案的時間,但我不確定這是否正確。這個微軟網站上說「反XSRF令牌的有效載荷是經過加密和簽名的」。以下是該網頁的網址:http://www.asp.net/mvc/overview/security/xsrfcsrf-prevention-in-aspnet-mvc-and-web-pages。我相信我的情況是,用於加密和解密的MachineKey在重新啓動網站或應用程序池之間並不會像以前那樣發生實際變化。我找不到支持這些文檔的文檔,但這正是我認爲正在發生的事情。 – DustinA