我在我的asp.net mvc形式(nicedit與textarea)使用豐富的文本編輯器,當我提交後表單,因爲它不是HTML編碼我得到以下消息: 「從客戶端檢測到潛在危險的Request.Form值」。 我該如何在郵編上對textarea進行編碼?我不想取消驗證。 有沒有辦法在提交時使用html.encode助手?asp.net mvc編碼形式帖子
謝謝。
我在我的asp.net mvc形式(nicedit與textarea)使用豐富的文本編輯器,當我提交後表單,因爲它不是HTML編碼我得到以下消息: 「從客戶端檢測到潛在危險的Request.Form值」。 我該如何在郵編上對textarea進行編碼?我不想取消驗證。 有沒有辦法在提交時使用html.encode助手?asp.net mvc編碼形式帖子
謝謝。
你可以用裝飾動作處理表單提交的ValidateInputAttribute:
[ValidateInput(false)]
[HttpPost]
public ActionResult SomeActionToHandleFormSubmission()
{
...
}
您在使用.NET 4.0?如果是這樣,你還需要
<system.web>'
<httpRuntime requestValidationMode="2.0"/>'
在你的config.web文件中。
這會禁用整個網站的驗證,這可能不是最佳實踐。 @ Darin的回答是在MVC環境中禁用驗證的正確方法。 – 2010-04-29 22:13:35
Paul - 麻煩是@ Darin的答案對於.net 4是不完整的 – 2010-05-12 22:19:06
不是關閉ValidateInput
,因爲那麼你可以接受漏洞,你可以使用Javascript來編碼特殊的字符。這可以讓你不拋出錯誤消息:從 客戶
對於一些簡單的inputs檢測
有潛在危險的Request.Form值(例如作爲格式
MyName<[email protected]>
電子郵件),但仍具有內置的MVC功能來監視其他腳本注入的背部。當然,如果你需要在服務器上輸入正確的格式,你將不得不解碼它,並且要小心,如果你再次輸出它如果已經使用jQuery,可以很容易地添加到所有輸入字段如下
$("input").on("change", function() { $(this).val(htmlEscape($(this).val())); });
htmlEscape
這裏是我自己的函數來更改特殊字符。function htmlEscape(str) { return str .replace(/</g, '<') .replace(/>/g, '>'); }
根據您的需求,你可能會想要逃避使用的所有字符內置的JavaScript函數
encodeURI
或延長上述功能,如:function htmlEscape(str) { return str .replace(/&/g, '&') .replace(/"/g, '"') .replace(/'/g, ''') .replace(/</g, '<') .replace(/>/g, '>'); }
裝飾領域與AllowHtml將做的工作,而不省略驗證邏輯。這解決了我在沒有編碼/解碼的情況下的問題。
[System.Web.Mvc.AllowHtml]
public string YourField { get; set; }
感謝您的回答,但我不想取消驗證。我想在提交之前對它進行編碼。無論如何,即使當我把它的屬性,它仍然給我的服務器錯誤。 – Gidon 2010-04-28 08:08:15
即使在編碼後,ASP.NET可能會引發此異常,因爲它旨在阻止用戶發佈危險內容,然後將其顯示回其他用戶。由於您幾乎可以肯定地在顯示之前對其進行解碼,因此ASP.NET必須驗證解碼後的內容是否具有任何價值。 Bu將ValidateInput屬性添加到_POST_操作方法,告訴ASP.NET您知道自己在做什麼並將採取適當措施確保提交的內容是安全的。 – 2010-04-29 22:16:19
爲確保提交的內容安全,我需要採取哪些適當的措施? – Gidon 2010-05-01 13:52:47