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

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

“从客户端(…)检测到一个潜在危险的Request.Form值。”

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[]访问值将触发请求validation(因此例外)。 您可以使用HttpRequestUnvalidated属性来获取请求值,而不会触发validation。

更换

 Request.Form[k] 

 Request.Unvalidated.Form[k] 

谨慎使用 – 从文档中 :

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