为什么Glimpse会禁用请求验证?

时间:2014-10-03 14:49:16

标签: asp.net security webforms xss glimpse

我发现请求验证无法在我的电脑上运行,这意味着它的行为与我们的实时网络服务器不同。经过一些实验,看起来Glimpse就是原因(Glimpse的版本还没有上线,这就是现场服务器工作正常的原因)。

e.g。这个恶意网址:

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

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

  

从客户端检测到一个潜在危险的Request.QueryString值(foo =“&lt; script&gt;”)。

然而,一旦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:

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

我还注意到我通过在Web.config中设置<glimpse defaultRuntimePolicy="Off" />来瞥见,然后请求验证也正常启动。

1 个答案:

答案 0 :(得分:3)

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

FWIW,ASP.NET团队已取消请求验证。有关详细信息,请参阅http://www.asp.net/aspnet/overview/web-development-best-practices/what-not-to-do-in-aspnet,-and-what-to-do-instead#validation