2010-04-28 25 views
2

我在我的asp.net mvc形式(nicedit與textarea)使用豐富的文本編輯器,當我提交後表單,因爲它不是HTML編碼我得到以下消息: 「從客戶端檢測到潛在危險的Request.Form值」。 我該如何在郵編上對textarea進行編碼?我不想取消驗證。 有沒有辦法在提交時使用html.encode助手?asp.net mvc編碼形式帖子

謝謝。

回答

4

你可以用裝飾動作處理表單提交的ValidateInputAttribute

[ValidateInput(false)] 
[HttpPost] 
public ActionResult SomeActionToHandleFormSubmission() 
{ 
    ... 
} 
+0

感謝您的回答,但我不想取消驗證。我想在提交之前對它進行編碼。無論如何,即使當我把它的屬性,它仍然給我的服務器錯誤。 – Gidon 2010-04-28 08:08:15

+0

即使在編碼後,ASP.NET可能會引發此異常,因爲它旨在阻止用戶發佈危險內容,然後將其顯示回其他用戶。由於您幾乎可以肯定地在顯示之前對其進行解碼,因此ASP.NET必須驗證解碼後的內容是否具有任何價值。 Bu將ValidateInput屬性添加到_POST_操作方法,告訴ASP.NET您知道自己在做什麼並將採取適當措施確保提交的內容是安全的。 – 2010-04-29 22:16:19

+0

爲確保提交的內容安全,我需要採取哪些適當的措施? – Gidon 2010-05-01 13:52:47

-1

您在使用.NET 4.0?如果是這樣,你還需要

<system.web>' 
<httpRuntime requestValidationMode="2.0"/>' 

在你的config.web文件中。

+0

這會禁用整個網站的驗證,這可能不是最佳實踐。 @ Darin的回答是在MVC環境中禁用驗證的正確方法。 – 2010-04-29 22:13:35

+0

Paul - 麻煩是@ Darin的答案對於.net 4是不完整的 – 2010-05-12 22:19:06

1

不是關閉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, '&lt;') 
     .replace(/>/g, '&gt;'); 
} 

根據您的需求,你可能會想要逃避使用的所有字符內置的JavaScript函數encodeURI或延長上述功能,如:

function htmlEscape(str) { 
    return str 
     .replace(/&/g, '&amp;') 
     .replace(/"/g, '&quot;') 
     .replace(/'/g, '&#39;') 
     .replace(/</g, '&lt;') 
     .replace(/>/g, '&gt;'); 
} 
0

裝飾領域與AllowHtml將做的工作,而不省略驗證邏輯。這解決了我在沒有編碼/解碼的情況下的問題。

[System.Web.Mvc.AllowHtml] 
public string YourField { get; set; }