asp.net mvc编码在表单上

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

谢谢。

您可以使用ValidateInputAttribute修饰处理表单post的操作:

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

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

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

对于一些简单的输入(例如MyName格式的电子邮件),但仍然具有内置的MVCfunction,可以观察您的其他脚本注入。 当然,如果您需要在服务器上以正确的格式输入,则必须对其进行解码,如果再次输出则要小心

如果已经使用了jQuery,可以很容易地将其添加到所有输入字段,如下所示

 $("input").on("change", function() { $(this).val(htmlEscape($(this).val())); }); 

这里的htmlEscape是我自己改变特殊字符的function。

 function htmlEscape(str) { return str .replace(//g, '>'); } 

根据您的需要,您可能希望使用内置的Javascript函数encodeURI来转义所有字符,或者扩展上述函数,例如:

 function htmlEscape(str) { return str .replace(/&/g, '&') .replace(/"/g, '"') .replace(/'/g, ''') .replace(//g, '>'); } 

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

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

你在使用.net 4.0吗? 如果是这样,你也需要

 ' ' 

在您的config.web文件中。