繁体   English   中英

在ASP.NET MVC 2中提交表单时优雅地处理HTML标签

[英]Gracefully handling HTML tags on form submission in asp.net MVC 2

嗨,我有一个MVC网站,将让用户输入要在网页上显示的文本。 我正在尝试提出一种处理用户尝试输入的任何HTML的优雅方法-因为您可能会知道MVC 2对文本中的任何HTML都会引发错误。

我使用ViewModels并使用DataAnotation类中的过滤器装饰属性,以验证表单。

现在有人这样吗?

是否有一些疯狂的正则表达式无法与HTML相匹配,但不能与其他任何方式匹配?

我愿意接受任何建议。

谢谢,

西蒙

添加以下属性将阻止运行时抱怨:

[ValidateInput(false)]
public ActionResult SomeEvilAction ()
{
    /* ... */
}

现在,您的任务就是对显示在页面上的每个输入进行HTML编码:

<%= HttpUtility.HtmlEncode (Model.Text) %>

要么

<%: Model.Text %>

我前几天在一个网站上做了这件事。

我使用的是所见即所得的编辑器,该编辑器放置了正确的html,而不是bb代码。

我从page指令禁用了页面上的验证,以停止mvc引发潜在的不安全代码异常,并使用正则表达式删除了所有脚本标签实例。

参见Developer Art的帖子

您可能需要将此添加到您的web.config

<httpRuntime requestValidationMode="2.0" />

我使用的正则表达式如下:

(?<startTag><\s*script[^>]*>)(?<scriptContent>[\s\S]*?)(?<endTag><\s*/script>)

这将为您提供3个命名组。 startTag scriptContent endTag

因此,您可以对script元素进行替换并显示脚本的内容,或者将其完全删除。

您真正想做的任何事情。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM