【问题标题】:Why does Glimpse disable request validation?为什么 Glimpse 禁用请求验证?
【发布时间】:2014-10-03 14:49:15
【问题描述】:

我发现请求验证在我的 PC 上不起作用,这意味着它的行为与我们的实时 Web 服务器不同。经过一些实验,原因似乎是 Glimpse(带有 Glimpse 的版本尚未上线,这就是在线服务器正常工作的原因)。

例如这个恶意网址:

http://website/?foo=<script>

...应该会导致以下错误:

从客户端检测到一个潜在危险的 Request.QueryString 值 (foo="

然而,一旦 Glimpse 在 web.config “modules”部分注册,请求验证就不会发生(即使 Glimpse 已关闭),从而使网站容易受到跨站脚本攻击( XSS)。

如果我删除注册 Glimpse 的行,则请求验证立即正常工作:在 IIS 7.5 中,如下所示:

<system.webServer>
    <modules>
        <add name="Glimpse" type="Glimpse.AspNet.HttpModule, Glimpse.AspNet" preCondition="integratedMode" />
    </modules>

有什么办法可以解决这个问题,或者这是 Glimpse 中的一个错误?

更新 1:

我现在已经验证,如果我将 Glimpse 全新安装到一个不相关的项目(运行 ASP.NET 4.5.1)中,就会出现问题,因此它与原始项目不兼容。我没有更改任何设置,我只是从 NuGet 安装它,问题立即显现。

我还注意到我通过在 Web.config 中设置 &lt;glimpse defaultRuntimePolicy="Off" /&gt; 来关闭 glimpse,然后请求验证也会正常启动。

【问题讨论】:

  • 不应该这样。您能否提供有关您正在使用的 Glimpse 和 ASP.NET 版本、已安装的插件和复制步骤的信息?
  • 本周我从 NuGet 安装了 Glimpse,用于 ASP.NET 4.0 Web 表单站点。然后注意到请求验证被破坏。删除 Glimpse 模块可以修复它。给我几分钟 - 我会发布更多信息。
  • 即使没有注册其他模块,我也可以确认问题是可重现的。
  • 它发生在我安装 Glimpse 的其他网站上。我已经用更多信息更新了问题(更新 1)。

标签: asp.net security webforms xss glimpse


【解决方案1】:

请求验证在 ASP.NET 中的工作方式是验证输入并抛出异常仅在第一次调用Request.RawUrlRequest.QueryString 等。 Glimpse 在请求的早期(来自RequestMetadata.get_RequestIsAjax)查找查询字符串并吞下异常,因此将来在同一请求上下文中对Request.QueryString 的调用将不会被验证。

FWIW,ASP.NET 团队拒绝验证请求。请参阅https://docs.microsoft.com/en-us/aspnet/aspnet/overview/web-development-best-practices/what-not-to-do-in-aspnet-and-what-to-do-instead#validation 了解更多信息。

【讨论】:

  • 谢谢 - 这似乎是可能的原因。或许那时我将不得不设置第二层保护。我不确定它是否真的被否认了。它提供了良好的基本保护级别,并且在 4.5 中仍然是受支持的功能。
  • 不,它被否认了。它默认开启的唯一原因是为了向后兼容,not 是为了安全。提供给我们的任何与请求验证相关的错误都会立即解决为“无法修复”。我在stackoverflow.com/a/25748194/59641 更详细地介绍了这一点。
  • 所以基本上没有解决办法,除了在请求验证被认为有用时关闭 Glimpse 吗?
  • 感谢李维斯的更新。我没有意识到请求验证被拒绝了。过去,我们做了一些疯狂的事情来避免这种副作用——这一直困扰着我。
猜你喜欢
  • 2013-10-17
  • 2011-12-15
  • 1970-01-01
  • 1970-01-01
  • 2010-11-22
  • 2021-01-20
  • 2023-04-07
  • 2016-06-02
  • 1970-01-01
相关资源
最近更新 更多