禁用动作参数的xss验证(ValidateInput)

时间:2014-02-17 17:17:27

标签: c# .net asp.net-mvc

鉴于以下控制器&动作:

    public class CommentsController: AsyncController
    {
            [HttpPost, ValidateAntiForgeryToken, ValidateInput(false)]
            public ActionResult AddComment(string subject, string text) {..}
    }

当控制器收到带有encodeURIComponent("<>")数据的ajax请求时:

    Content-Type:application/x-www-form-urlencoded

    subject=hello&text=%3C%3E

然后正确设置主题,但文本始终为空 那是为什么?

1 个答案:

答案 0 :(得分:0)

尝试将AllowHtml属性附加到您的输入属性,而不是使用ValidateInput=false。它只能附加到属性,因此您需要为输入参数创建POCO模型(顺便说一句,在您的情况下,最好有一个,例如包含其他验证属性)。例如:

public class CommentModel 
{
    public string Subject { get; set; }

    [AllowHtml]
    public string Text { get; set; }
}

[HttpPost, ValidateAntiForgeryToken]
public ActionResult AddComment(CommentModel model) ...