我在我的asp.net mvc表单中使用了富文本编辑器(带有textarea的nicedit),当我在帖子上提交表单时,由于它不是html编码,我收到以下消息: “从客户端检测到一个潜在危险的Request.Form值”。 我如何在帖子上对textarea进行html编码?我不想取消验证。 有没有办法在提交时使用html.encode助手?
谢谢。
答案 0 :(得分:4)
[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, '<')
.replace(/>/g, '>');
}
根据您的需要,您可能希望使用内置的Javascript函数encodeURI
转义所有字符,或者扩展上述函数,例如:
function htmlEscape(str) {
return str
.replace(/&/g, '&')
.replace(/"/g, '"')
.replace(/'/g, ''')
.replace(/</g, '<')
.replace(/>/g, '>');
}
答案 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文件中。