2014-01-08 23 views
0

好的,我希望我在這裏錯過了一點。Html.AntiForgeryToken如何通過前面的GET來保護POST

長期以來,MVC有一個Html.AntiForgeryToken()幫助器將一個令牌插入表單中以保護從另一個網站提交的表單。 (CSRF)

助手將產生一個隱藏的輸入,像:

<input type="hidden" value="cXnXkzw2..." name="__RequestVerificationToken"> 

哪些在服務器側是已知的,並用於驗證POST。聽起來不錯。

但是,如果一個人會把精力腳本的攻擊,它使用的網站和惡意POST的身份驗證cookie,如何努力會是執行之前的GET首先檢索該隱藏輸入AntiForgeryToken並使用它在POST

換句話說; AntiForgeryToken如何在這裏幫助?

回答

1

簡單的答案是,它沒有。

反僞造令牌(其中一個作爲cookie &另一個作爲隱藏表單字段)由於相同的源策略而不應該被惡意頁面/攻擊者訪問。這意味着攻擊者無法訪問其他網站上的內容。

如果它是可訪問的,那麼這完全損害了令牌,並且它們變得多餘。如果啓用了跨域,您建議的內容可能會發生。

我希望這回答你的問題斯蒂芬。

+1

啊,所以除了身份驗證cookie之外,還有一個cookie(或相同的身份驗證cookie),其中包含有關令牌值的信息......這是有道理的。 – Stefan

+0

是的 - 服務器將驗證服務器上的兩個令牌。 – heymega

+0

IFrame是否安全? (我不得不承認,我對IFrame沒有這方面的經驗) – Stefan