【问题标题】:validate html tag input for a textbox control globally in web.config file在 web.config 文件中全局验证文本框控件的 html 标记输入
【发布时间】:2018-12-21 11:52:14
【问题描述】:

我想限制用户提供 html 标签作为输入。
那么如何在我的 Asp.Net MVC 项目的 web.config 文件中全局处理它。 我使用了ValidateInput(false),但它完全允许html标签保存在db中。

【问题讨论】:

    标签: asp.net-mvc razor-pages


    【解决方案1】:

    默认情况下,在 MVC 中启用 XSS 验证。因此,您不必限制 HTML 的输入(它已经受到限制),而是只允许对您标记的某些 Actions 或 ViewModel 属性进行 HTML 输入。

    在 Action 上设置 [ValidateInput(false)] 属性将禁用对整个 Action 的验证。

    在 ViewModel 属性上设置 [AllowHtml] 属性仅允许该属性的 HTML 输入。这是启用 HTML 输入的推荐方式。

    要解决您的问题,您应该从 Action 中删除 [ValidateInput(false)]

    延伸阅读:Preventing XSS Attacks in ASP.NET MVC using ValidateInput and AllowHTML.

    还要确保您在 web.config 中配置了正确的 requestValidationModerequestValidationMode 4.5 vs 2.0.


    若要在输入验证失败时提供自定义错误消息,请在 Global.asax 中注册一个 IExceptionFilter,它会检查抛出的异常是否为 HttpRequestValidationException

    public class HttpRequestValidationExceptionFilter : FilterAttribute, IExceptionFilter {
    
        public const int MySpecialStatusCodeIndicatingValidationError = 1337;
    
        public void OnException(ExceptionContext filterContext) {
            if (!filterContext.ExceptionHandled && filterContext.Exception is HttpRequestValidationException) {
                // redirect to error controller, which shows custom message
                filterContext.Result = new HttpStatusCodeResult(MySpecialStatusCodeIndicatingValidationError);
                filterContext.ExceptionHandled = true;
            }
        }
    }
    

    有关处理带有特殊状态代码的错误的可能机制,请参阅ASP.NET MVC 404 Error Handling。这个想法是识别MySpecialStatusCodeIndicatingValidationError并重定向到自定义HttpErrorController中的正确操作。

    【讨论】:

    • 感谢您的信息,但我的目的是每当用户在文本框中输入 html 标签时向用户发送错误消息,并且我希望在一个地方全局处理此问题,可能是在 web.config 或 Global.asax
    • 请参阅我的编辑,了解如何捕获默认请求验证引发的异常并提供自定义消息。
    • 感谢您的信息,我还有一个问题,有没有办法清除验证提供程序(我们在 global.asax ModelValidatorProviders.Providers.Clear(); 中提供),并在其中添加自定义验证提供程序web.config 文件
    猜你喜欢
    • 1970-01-01
    • 2011-08-18
    • 1970-01-01
    • 1970-01-01
    • 2012-03-01
    • 1970-01-01
    • 2010-12-27
    • 1970-01-01
    • 2021-10-11
    相关资源
    最近更新 更多