警惕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 請求。 如果檢測到,將引發異常。 使用此屬性可以禁用請求驗證。

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM