我們有一個使用MVC3和自定義身份驗證方法的網站,它根本不依賴表單身份驗證 - 至少從我所知道的。在web.config中,我們設置了AntiForgeryToken沒有表單身份驗證
<authentication mode="None"></authentication>
並且我們從不在代碼的任何地方使用/設置HttpContext.User。
A required anti-forgery token was not supplied or was invalid
我們集中在OnAuthorization所有防僞檢查與此代碼:
if (String.Compare(filterContext.HttpContext.Request.HttpMethod, "post", true) == 0)
{
var forgery = new ValidateAntiForgeryTokenAttribute();
forgery.OnAuthorization(filterContext);
}
也就是說當使用@ Html.AntiForgeryToken()在某些情況下,用戶獲取此錯誤消息的問題是發生異常的地方。我們有defined a machineKey in web.config以防止應用程序池回收時生成新密鑰。這並沒有解決問題。
接下來我們認爲客戶端的瀏覽器可能不會發送cookie。我們開始記錄cookie,並注意到在某些情況下,RequestVerificationToken_Lw cookie會發送,但在其他情況下不會發送 - 即使其他cookie(如Google Analytics發出的cookie)也可以一起發送。它可能是瀏覽器中的某些東西是剝離出一些cookie並將其他人留下?
看起來好像是anti-forgery token depends on forms authentication。是這樣嗎?在不以可靠的方式使用表單身份驗證的情況下繼續使用AntiForgeryToken的任何方法。請記住,我上面描述的方法適用於90%以上的案例,但我們無法確定爲什麼它不適用於某些人。
想法?
謝謝!
如果您不使用任何身份驗證,爲什麼要關心防僞令牌? CSRF攻擊的目的是攻擊者代表某個網站上的某些經過身份驗證的用戶執行操作。如果一個網站沒有使用認證,CSRF似乎是無意義的。 –
我正在使用身份驗證,而不是表單身份驗證。 – pbz
你使用什麼樣的認證? –