在web.config文件中全局验证文本框控件的html标签输入

时间:2018-07-13 06:58:52

标签: asp.net-mvc razor-pages

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

1 个答案:

答案 0 :(得分:0)

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

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

在ViewModel属性上设置[AllowHtml]属性仅允许该属性的HTML输入。建议使用此方法来启用HTML输入。

要解决您的问题,应从“操作”中删除[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中的正确操作。