【问题标题】:MVC 5 - A potentially dangerous Request.Form value was detected from the clientMVC 5 - 从客户端检测到潜在危险的 Request.Form 值
【发布时间】:2015-02-05 19:59:05
【问题描述】:

我正在开发一个 MVC5 互联网应用程序,并且对具有 HTML 数据的用户输入有疑问。

我知道,如果我想在模型中包含 HTML 代码,我可以包含 [AllowHtml] 数据注释,然后清理对象字段。

我的问题是,对于没有[AllowHtml] 数据注释的任何对象字段,用户在其中输入一些HTML 代码,是否可以迎合这个错误而不是让Error.cshtml 显示错误?

理想情况下,我希望在Error.cshtml 显示并记录错误之前在视图中显示一条验证消息。

这可能吗?在Error.cshtml 显示并记录错误之前,我该如何应对错误。

提前致谢。

更新

我在Global.asax文件中有如下函数:

protected void Application_Error(object sender, EventArgs e)

此函数会捕获我的错误,例如当用户转到不存在的页面时,相关的 http error 会直接转到 error.cshtml 文件。

如何编辑我的代码以便Application_Error 函数捕获此错误?

我正在使用Elmah 进行日志记录,并拥有customErrors mode="On"

【问题讨论】:

    标签: validation razor error-handling asp.net-mvc-5 asp.net-mvc-views


    【解决方案1】:

    编写一个检查文本框是否不包含 HTML 的验证器并不容易。这是因为 HTML 不是由某些字符定义的,而是由它们的组合定义的。包含 <、'>' 甚至 <script> 的文本不一定是 HTML。

    您应该采用允许值的方法。如果一个文本框应该只包含数字,那么像这样验证它。

    通过在Global.asax 中覆盖Application_Error,您可以捕获此异常并将用户重定向到更有意义的错误页面

    protected void Application_Error()
    {
        Exception lastError = Server.GetLastError();
        if (lastError is HttpRequestValidationException)
        {
            //redirect to a static page and show proper error message
        }
    }
    

    如果您使用 Elmah,事情就更简单了。 Elmah 旨在与 ASP.Net 错误处理一起使用。

    您需要从App_Start\FilterConfig(或Global.asax)中删除默认的全局HandleErrorAttribute,然后在您的Web.config中设置错误页面:

    <customErrors mode="On" defaultRedirect="~/error/" />
    

    如果你遇到麻烦请查看这篇文章,它很好地解释了一切
    http://www.hanselman.com/blog/ELMAHErrorLoggingModulesAndHandlersForASPNETAndMVCToo.aspx

    【讨论】:

    • Application_Error() 函数仍然没有捕捉到错误,而是显示了error.cshtml。
    • 我在控制器中添加了一个受保护的覆盖 void OnException(ExceptionContext filterContext) 函数,该函数捕获了错误。这是应该怎么做的吗?
    • 你应该点击这个链接:hanselman.com/blog/…
    猜你喜欢
    • 2018-03-19
    • 1970-01-01
    • 2012-05-29
    • 2012-03-03
    • 2013-11-15
    相关资源
    最近更新 更多