捕获ValidateInput

时间:2009-08-25 03:35:58

标签: asp.net-mvc

如果我的页面上有搜索框,我显然不希望用户输入任何可能有危险的代码。

但是,我有很多数据输入页面,每个页面都需要在控制器上有ValidateInput(false)。

我不想允许危险的输入,但我也不想在每个控制器中处理这个。

是否存在可以覆盖默认且丑陋的错误.Net错误消息的方法,或者是否存在跨控制器处理此错误消息的统一方式。

修改

我想也许我没有正确地提出这个问题。

对于每个数据输入页面,我必须转向输入验证。这变得有些无聊和麻烦。每当我接受输入时,我需要HTMLEncode,然后是HTMLDecode。

有没有办法在一个中心位置自动执行此操作?

2 个答案:

答案 0 :(得分:1)

ASP.NET和MVC默认情况下不允许HTML提交。你必须积极地启用它。有关更多信息,请参阅ValidateInputAttribute。

此外,比不允许HTML输入更重要的是在创建输出时不显示用户提交的HTML。这就是为什么所有默认生成的视图都使用Html.Encode,以及为什么你也应该这样做。

响应已编辑的问题更新

是的,有可能(虽然可能不建议)全局关闭ValidateInput。创建父控制器类型,然后输入

[ValidateInput(false)] 

...在类上。

另外,我不建议编码输入。如果您允许用户输入HTML,我会按原样存储。您的网络应用可能不是查询您的数据库的唯一内容!在过滤掉“危险”HTML方面,这非常困难。我会使用经过测试的第三方清理库。

答案 1 :(得分:1)

关于输出:

这是一个interesting post 来自Steve Sanderson的another one

我刚刚读了那篇帖子 - 没试过自己。

给出一些反馈意见。

关于输入:
你可以尝试使用模型绑定器和它需要的HtmlEncode值。