C# ASP.NET MVC 手动访问 Request.Form 和潜在危险值



我正在为每个用户请求序列化表单和查询字符串数据并将其保存到数据库中。 此特定提交的模型已具有 [AllowHtml] 属性,并且可以很好地提交给控制器。 问题出在我记录请求的 Global.asax 文件中,当我访问此表单值时,我收到异常:

"从 客户端(...

protected void Application_PostRequestHandlerExecute(Object sender, EventArgs e)
{
    ...
    var serializer = new JavaScriptSerializer();
    var formData = (Request.Form.Count == 0) ? "" : serializer.Serialize(Request.Form.AllKeys.Where(x => x != null).ToDictionary(k => k, k => Request.Form[k]));
    ...
}

当它尝试访问 Request.Form[k] 时,当它包含无效字符时,会引发错误。

使用 Request.Form[] 访问值将触发请求验证(因此出现异常)。可以使用 HttpRequestUnvalidated 属性获取请求值,而无需触发验证。

取代

Request.Form[k]

Request.Unvalidated.Form[k]

谨慎使用 - 来自文档:

安全说明:如果使用此属性,则必须手动检查数据是否存在潜在的跨站点脚本攻击。

最新更新