警戒ASP.NET MVC中的ValidateInputAttribute

最近在作一個ASP.NET MVC項目的時候發現,有一個Controller的Action死活都無法接收到從客戶端提交過來的Html表單請求和數據,後來才發現是由於默認狀況下ASP.NET MVC在執行Controller的代碼前,會對客戶端提交到服務器的數據作安全性驗證,若是ASP.NET檢測到客戶端提交的數據中有危險數據(危險數據通常是一些關鍵字和關鍵符號),那麼就會中斷當前客戶端提交的請求而且引起一個異常,那麼客戶端提交的數據天然就不會進入到Controller和Action了。主要緣由是在該項目中有頁面使用了富文本編輯器,而用戶在富文本編輯器中輸入的文字其實是Html,因此當富文本編輯器的數據提交到服務器端後,ASP.NET認爲客戶端提交的數據中包含大量Html標籤是危險數據,請求直接就被終止了,而後拋出異常。其實這個問題不光在ASP.NET MVC中存在,在WebForm中也是有數據安全性驗證的,並且MVC和WebForm的數據安全性驗證是能夠經過設置來關閉的,詳情請接着往下看。緩存

 

後來才知道,原來在ASP.NET MVC中有一個叫ValidateInputAttribute的Filter能夠關閉數據安全性驗證,將其加到接收數據的Action上後,客戶端富文本編輯器的數據就能成功傳入Action了,以下所示傳入參數false就告訴ASP.NET不要對這個Action作數據安全性驗證。 安全

 

 

下面是對MVC系統自帶經常使用的幾個Filter的介紹,其中就有ValidateInputAttribute服務器

名稱 說明
OutputCacheAttribute  相似於 Web Form中在 OutputCache 指令。 OutputCache 屬性容許在 MVC Framework 緩存控制器的輸出。
ValidateInputAttribute 

相似於 Web Form中 ValidateRequest 屬性。 MVC 框架默認將爲 檢查HTML 或其餘危險輸入傳入的 HTTP 請求。 若是檢測到,將引起異常。 使用此屬性能夠禁用請求驗證。mvc

AuthorizeAttribute Authorize 屬性,能夠對控制器操作的聲明性的受權檢查。 該屬性能夠限制特定角色中的用戶的操做。 當您建立只應該給管理員角色中的用戶的操做時,您可使用此屬性。默認使用的ASP.NET Membership服務,若是不使用ASP.NET 的Membership服務,能夠繼承AuthorizeAttribute,重寫實現。
ValidateAntiForgeryTokenAttribute 此屬性是一個解決方案以幫助防止跨站點的請求攻擊 (CSRF)。 它容許驗證的 HTTP POST 爲特定於用戶的標記在 Framework。 有關詳細信息 CSRFs,請參閱" 使用 ASP.NET MVC AntiForgeryToken() 幫助器防止跨站點請求僞造 (CSFR)."
相關文章
相關標籤/搜索