ASP.NET MVC – AllowHtml & FormCollection 發生的問題

[AllowHtml]
public string html { get; set; }

前幾天遇到一個問題,在 edit 頁面 post 的時候,一直遇到說安全性的問題,回傳具有危險性的字串而造成錯誤,的確回傳的欄位中有一個是具有 Html 的內容,但是已經在 Model 部分加上 [AllowHtml] 的屬性,而且同樣一個 Model 被不同的 Action 一起使用。確實在加上[AllowHtml] 屬性之後是可以回傳 html 的內容,但是錯誤訊息也指向是 html 內容回傳的錯誤。

具有潛在危險 Request.Form 的值已從用戶端 (html="<a></a>") 偵測到。 
描述: 要求驗證偵測到具有潛在危險的用戶端輸入值,對這個要求的處理已經中止。
這個值可能表示有人嘗試危害應用程式的安全性,例如跨站台的指令碼處理攻擊。若要
允許頁面覆寫應用程式要求驗證設定,請將 httpRuntime 組態區段中的 requestV
alidationMode 屬性設定為 requestValidationMode="2.0"。
例如: <httpRun
time requestValidationMode="2.0" />。
設定這項值之後,您就可以停用要求驗
證,方法是在頁面指令或 <pages>
組態區段中設定 validateRequest="false"。但
是我們強烈建議您的應用程式應該明確地檢查所有這類的輸入。
如需詳細資訊,請參閱
http://go.microsoft.com/fwlink/?LinkId=153133。

找了一下子才發現原因出在 FormCollection 這個參數上,在 Post 的時候,除了接收 Model 的部分,還多接收了一個 FormCollection 的參數

[HttpPost]
public ActionResult Edit(ItemModel model, FormCollection collection)

但是 FormCollection 並不會受到 Model 屬性的影響,即使在欄位屬性加上了 [AllowHtml] ,FormCollection 在判斷到有 Html 回傳的時候,還是判斷具有危險。

Reference

http://stackoverflow.com/questions/5022134/mvc-3-rtm-allowhtml-doesnt-work-when-using-formcollection

http://www.dotblogs.com.tw/johnny/archive/2010/03/01/13829.aspx

發表迴響

你的電子郵件位址並不會被公開。 必要欄位標記為 *