ActionFilterAttribute - 具有潜在危险的 Request.Form 值
ActionFilterAttribute - A potentially dangerous Request.Form value
我有一个审计系统在表单值包含 HTML.
时失败
我已经将 [AllowHtml]
属性添加到有问题的模型 属性 中,并尝试将 [ValidateInput(false)]
添加到控制器操作,以及使用 Unvalidated()
HttpRequestBase
.
上的扩展方法
None 这是为了防止错误。它失败的代码行(在审计代码中,派生 ActionFilterAttribute
的 OnActionExecuting()
)是:
return Json.Encode(new { request.Cookies, request.Headers, request.Files, request.Form, request.QueryString, request.Params });
错误是:
A first chance exception of type
'System.Web.HttpRequestValidationException' occurred in System.Web.dll
Additional information: A potentially dangerous Request.Form value was
detected from the client (Note="<p>test</p>
").
"Note" 是模型 属性 上面有 [AllowHtml]
。
关于如何防止这种情况的任何想法?
了解 ASP.NET MVC 管道中的操作顺序很重要。你的 OnActionExecuting
方法甚至在你的控制器中的动作开始之前就被调用了。如果您的控制器操作尚未执行,则意味着您的 ValidateInput
注释未被考虑。这也意味着模型绑定尚未发生,因此不考虑您的 AllowHtml
注释。此时,您刚刚访问了基本的 Form
集合,当您尝试通过 Json.Encode()
序列化访问数据时,ASP.NET 的安全保护仍在启动。
要解决此问题,您可以在 Web.config 中完全禁用请求验证(不推荐),或者对 JSON 序列化给予更多关注。为此,您必须在展开 属性:
的值时调用 Unvalidated()
return Json.Encode(new {
request.Cookies,
request.Headers,
request.Files,
new {
Note = Request.Unvalidated().Form["Note"]
//Add any other properties you care about here
},
request.Form,
request.QueryString,
request.Params
});
我有一个审计系统在表单值包含 HTML.
时失败我已经将 [AllowHtml]
属性添加到有问题的模型 属性 中,并尝试将 [ValidateInput(false)]
添加到控制器操作,以及使用 Unvalidated()
HttpRequestBase
.
None 这是为了防止错误。它失败的代码行(在审计代码中,派生 ActionFilterAttribute
的 OnActionExecuting()
)是:
return Json.Encode(new { request.Cookies, request.Headers, request.Files, request.Form, request.QueryString, request.Params });
错误是:
A first chance exception of type 'System.Web.HttpRequestValidationException' occurred in System.Web.dll
Additional information: A potentially dangerous Request.Form value was detected from the client (Note="
<p>test</p>
").
"Note" 是模型 属性 上面有 [AllowHtml]
。
关于如何防止这种情况的任何想法?
了解 ASP.NET MVC 管道中的操作顺序很重要。你的 OnActionExecuting
方法甚至在你的控制器中的动作开始之前就被调用了。如果您的控制器操作尚未执行,则意味着您的 ValidateInput
注释未被考虑。这也意味着模型绑定尚未发生,因此不考虑您的 AllowHtml
注释。此时,您刚刚访问了基本的 Form
集合,当您尝试通过 Json.Encode()
序列化访问数据时,ASP.NET 的安全保护仍在启动。
要解决此问题,您可以在 Web.config 中完全禁用请求验证(不推荐),或者对 JSON 序列化给予更多关注。为此,您必须在展开 属性:
的值时调用Unvalidated()
return Json.Encode(new {
request.Cookies,
request.Headers,
request.Files,
new {
Note = Request.Unvalidated().Form["Note"]
//Add any other properties you care about here
},
request.Form,
request.QueryString,
request.Params
});