2012-11-29 91 views
239

您能否解釋ValidateAntiForgeryToken的用途並在MVC 4中顯示關於ValidateAntiForgeryToken的示例?ValidateAntiForgeryToken的用途,說明和示例

我找不到解釋此屬性的任何示例?

+6

檢查這個帖子http://prideparrot.com/blog/archive/2012/7/securing_all_forms_using_antiforgerytoken – VJAI

+1

順便說一下,我真的不明白爲什麼MS沒有把這個權利放在'.BeginForm'幫手裏面。所以這個東西是自動出現的,就像Rails中的 – jazzcat

回答

281

MVC的防僞支持爲僅限HTTP的cookie寫入唯一值,然後將相同的值寫入表單。提交頁面時,如果cookie值與表單值不匹配,則會引發錯誤。

重要的是要注意,該功能可以防止​​3210。也就是說,來自另一個網站的表單發佈到您的網站,以嘗試使用經過身份驗證的用戶的憑據提交隱藏的內容。該攻擊涉及欺騙登錄用戶提交表單,或者在頁面加載時通過編程方式觸發表單。

該功能不會阻止任何其他類型的數據僞造或基於篡改的攻擊。

要使用它,請使用ValidateAntiForgeryToken屬性修飾操作方法或控制器,並在發送到方法的表單中發送呼叫@Html.AntiForgeryToken()

+0

謝謝你的幫助 –

+1

通過MVC CRUD模板的實現方式判斷,這看起來不正確。如果您查看使用它生成的表單,您會在每個表單中看到@ Html.AntiForgeryToken()。 VSDoc爲此說它會生成一個帶有防僞標記的隱藏表單域。似乎很清楚它實際上是一個隱藏的表單字段,而不是一個cookie。有沒有一個單獨的場景,它是一個cookie? –

+4

@Chris它是兩個。根據我的回答:「寫一個唯一的值給一個僅限HTTP的cookie,然後*將相同的值寫入表單*」 –

36

ValidateAntiForgeryToken屬性的基本目的是防止跨站點請求僞造攻擊。

跨站請求僞造是攻擊者從受信任用戶的瀏覽器發送有害腳本元素或惡意命令或代碼的攻擊。有關跨站點請求僞造的更多信息,請訪問 http://www.asp.net/mvc/overview/security/xsrfcsrf-prevention-in-aspnet-mvc-and-web-pages

它使用簡單,你需要裝飾的方法與ValidateAntiForgeryToken屬性如下:

[HttpPost] 
[ValidateAntiForgeryToken] 
public ActionResult CreateProduct(Product product) 
{ 
    if (ModelState.IsValid) 
    { 
    //your logic 
    } 
    return View(ModelName); 
} 

它是由System.web.mvc命名空間

而在你的視圖派生,添加以下代碼添加的令牌,因此它被用來在提交給驗證表單

@Html.AntiForgeryToken() 
+0

是的,您需要從表單中調用@ Html.AntiForgeryToken(),並將ValidateAntiForgeryTokenAttribute添加到您要保護的操作方法中。 –