我想限制用户提供html标签作为输入。
因此,如何在Asp.Net MVC项目的web.config文件中全局处理它。
我已经使用ValidateInput(false),但是它完全允许html标签保存在db中。
答案 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中配置了正确的requestValidationMode
。 requestValidationMode 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
中的正确操作。