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

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

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

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

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

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

这可能吗?我如何处理 Error.cshtml 之前的错误显示并记录错误。

提前致谢。

更新

我在 Global.asax 中有如下功能文件:

protected void Application_Error(object sender, EventArgs e)

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

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

我正在使用 Elmah用于记录并拥有 customErrors mode="On"

最佳答案

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

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

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

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 错误处理一起使用。

您需要删除默认的全局HandleErrorAttribute来自 App_Start\FilterConfig (或 Global.asax),然后在您的 Web.config 中设置错误页面:
<customErrors mode="On" defaultRedirect="~/error/" />

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

关于validation - MVC 5 - 从客户端检测到潜在危险的 Request.Form 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27353321/

相关文章:

javascript - 如何在异步操作期间使 Express.js 记录错误

sql - 校验SQL数据库

java - 您将如何轻松验证 JSP 选项选择列表?

asp.net-mvc - 当匹配不包含该参数的路由时,ActionLinks 恢复为查询字符串参数

c# - 为 WebGrid MVC 3 上的单列指定格式

c# - 获取错误 : Object reference not set to an instance of an object

django - 如何使用JsonResponse将错误消息发送到Django通用DeleteView确认页面

asp.net - RegularExpressionValidator 在多行文本框(文本区域)上运行缓慢

javascript - 我如何使用 x-editable 和 jquery 验证插件

python - 在python中捕获错误时如何使异常发生异常?