潜在危险的请求引起的OutputCache过滤器(Potentially dangerous Req

2019-07-18 13:13发布

我看到在我MVC3应用一个奇怪的行为。 我有一个由阿贾克斯称为行动,并接收与HTML文本的帖子。 我想允许HTML的进入,所以我设置ValidateInput(假)属性。 我也有这个参数的全球性的OutputCache过滤器:(NoStore = TRUE,持续时间= 0,VaryByParam时= “*”)
代码如下所示:

[HttpPost]
[ValidateInput(false)]
[OutputCache(NoStore = true, Duration = 0, VaryByParam = "*" )]
public ActionResult Edit(SomeModel someModel)
{
   saveModel(someModel);
   return new AjaxEditSuccessResult();
}

当我发个帖子说的方法,它是执行和模型被保存,但我得到的回应是标准的错误信息,这个堆栈跟踪“从客户端检测到有潜在危险的Request.Form值”:

[HttpRequestValidationException (0x80004005): A potentially dangerous Request.Form value was detected from the client (text="<p class="MsoNormal"...").]
System.Web.HttpRequest.ValidateString(String value, String collectionKey, RequestValidationSource requestCollection) +9665149
System.Web.<>c__DisplayClass5.<ValidateHttpValueCollection>b__3(String key, String value) +18
System.Web.HttpValueCollection.EnsureKeyValidated(String key) +9664565
System.Web.HttpValueCollection.Get(String name) +17
System.Web.Caching.OutputCacheModule.CreateOutputCachedItemKey(String path, HttpVerb verb, HttpContext context, CachedVary cachedVary) +676
System.Web.Caching.OutputCacheModule.CreateOutputCachedItemKey(HttpContext context, CachedVary cachedVary) +55
System.Web.Caching.OutputCacheModule.OnLeave(Object source, EventArgs eventArgs) +9716788
System.Web.SyncEventExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +136
System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +69

你知道,如果我能以任何方式表明对属性的OutputCache,它需要尊重ValidateInput属性?

Answer 1:

有在流动两个地方验证调用:

  1. 上控制器方法invokation
  2. 当渲染结果存储在缓存中。

你有固定的与第一个问题ValidateInputAttribute(false) ,但看起来像高速缓存模块忽略NoStore指令,并仍试图构建缓存键和做它验证的参数,摆脱指定的面前: Location = System.Web.UI.OutputCacheLocation.None ,使缓存模块甚至不会尝试做任何事情。 更换你OutputCache[...]像这样的东西:

[OutputCache(NoStore = true, Location = System.Web.UI.OutputCacheLocation.None)]


文章来源: Potentially dangerous Request caused by OutputCache filter