我已經開始在我的一些表單中使用AntiForgeryToken來防止跨站點請求僞造。然而,我收到了一些奇怪的行爲,只是想澄清這是一個錯誤還是隻是我做錯了什麼。我以我的形式使用Html.AntiForgeryToken()
電話。然後,我在表單發佈到的操作方法中使用[ValidateAntiForgeryToken]
屬性。此時我不使用鹽。AntiForgeryToken和ValidateAntiForgeryToken的意外行爲
我的理解是,Html.AntiForgeryToken()
會生成一個名稱爲__RequestVerificationToken
的隱藏輸入和一個名爲__RequestVerificationToken_Lw__
的cookie,它們都應該包含相同的值。
但是我遇到的問題是:
- 該Cookie始終具有相同的價值,不管你 多少次讓頁面
- 隱藏輸入每次得到的時間有不同的價值頁面
- ValidateAntiForgeryToken每次都會驗證,即使是在CSRF方案中的 不同站點。
- 如果我更改了國外網站的隱藏輸入的值時, 令牌不驗證(預期的行爲,但爲什麼它驗證 當隱藏的輸入/ cookie的值是不同的?)
任何人有任何想法?
好了,剛剛發現http://stackoverflow.com/questions/7186253/why-is-antiforgerytokens-hidden-field-not-same-as-它的cookie在我的機器上,它聲明它們的序列化不同,因此它們看起來包含不同的值。但是這並不能解釋爲什麼我的cookie值永遠不會改變(直到我刪除它並在我重新獲取頁面時生成一個新的),但輸入值確實發生了變化,或者爲什麼它總是驗證。 – coalvilledave
此行爲似乎只發生在安全請求中。 – coalvilledave