1. 首页>
  2. 技术文章>
  3. ASP.NET MVC 中,ValidateInput

ASP.NET MVC 中,ValidateInput

11/21/23 10:23:32 PM 浏览 1130 评论 0

mvc

在 ASP.NET MVC 中,ValidateInput 属性用于控制是否对控制器方法的输入进行自动请求验证。这项功能主要是为了防止跨站脚本攻击(XSS),它会检查输入的数据中是否包含 HTML 或 JavaScript 等可能被用于注入恶意代码的内容。

默认情况下,ASP.NET MVC 会对所有传入的请求数据进行验证,以保护应用程序不受到潜在的XSS攻击。如果请求中包含任何非法字符或编码,将会抛出一个 HttpRequestValidationException 异常。

然而,在某些情况下,你可能需要接收包含 HTML 标记的数据,例如允许用户提交富文本内容。这时可以使用 ValidateInput(false) 属性来关闭特定控制器方法的请求验证:

[HttpPost]
[ValidateInput(false)]
public ActionResult SubmitBlogPost(string content)
{
    // 这里的 content 可能包含 HTML 标记,因为验证已经被关闭
    ...
}

在上面的示例中,SubmitBlogPost 方法可以接收包含HTML的content,而不会触发自动请求验证。

需要注意的是,关闭请求验证可能会使你的应用程序更容易受到XSS攻击,因此在使用 ValidateInput(false) 时一定要谨慎,并确保通过其他方式(如适当的输出编码或使用安全的HTML清理库)来净化或转义输入值以避免安全漏洞。

从 ASP.NET MVC 4 开始,推荐的做法是使用 [AllowHtml] 属性来标记模型中的特定属性,这样就只会关闭该属性的验证,而不是整个请求:

public class BlogPostModel
{
    [AllowHtml]
    public string Content { get; set; }
    // 其他属性会保持正常的请求验证
    public string Title { get; set; }
}

网友讨论