asp.net mvc编码在表单上

时间:2010-04-28 07:53:39

标签: javascript jquery asp.net-mvc validation encoding

我在我的asp.net mvc表单中使用了富文本编辑器(带有textarea的nicedit),当我在帖子上提交表单时,由于它不是html编码,我收到以下消息: “从客户端检测到一个潜在危险的Request.Form值”。 我如何在帖子上对textarea进行html编码?我不想取消验证。 有没有办法在提交时使用html.encode助手?

谢谢。

4 个答案:

答案 0 :(得分:4)

您可以使用ValidateInputAttribute

修饰处理表单帖子的操作
[ValidateInput(false)]
[HttpPost]
public ActionResult SomeActionToHandleFormSubmission() 
{
    ...
}

答案 1 :(得分:1)

您可以使用Javascript对特殊字符进行编码,而不是关闭ValidateInput,因为您对漏洞持开放态度。这允许您不抛出错误消息:

  

从中检测到一个潜在危险的Request.Form值   客户端

对于一些简单的输入(例如格式为MyName<me@somewhere.com>的电子邮件),但仍然具有内置的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;');
}

答案 2 :(得分:0)

使用AllowHtml装饰字段将完成工作,而不会忽略验证逻辑。这解决了我的情况下没有编码/解码的问题。

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

答案 3 :(得分:-1)

您使用的是.net 4.0吗?如果是这样,你还需要

<system.web>' 
<httpRuntime requestValidationMode="2.0"/>'
在config.web文件中