Asp.net 为什么要禁用请求验证?

Asp.net 为什么要禁用请求验证?,asp.net,security,webforms,xss,glimpse,Asp.net,Security,Webforms,Xss,Glimpse,我发现请求验证在我的电脑上不起作用,这意味着它的行为与我们的实时网络服务器不同。经过一些实验,它似乎是一瞥的原因(与一瞥版本尚未上线,这就是为什么现场服务器正常工作) e、 g.此恶意URL: http://website/?foo=<script> http://website/?foo= …应导致以下错误: 从客户端检测到潜在危险的Request.QueryString值(foo=”“) 但是,一旦在web.config“modules”部分中注册了Spile,请求验证就不会

我发现请求验证在我的电脑上不起作用,这意味着它的行为与我们的实时网络服务器不同。经过一些实验,它似乎是一瞥的原因(与一瞥版本尚未上线,这就是为什么现场服务器正常工作)

e、 g.此恶意URL:

http://website/?foo=<script>
http://website/?foo=
…应导致以下错误:

从客户端检测到潜在危险的Request.QueryString值(foo=”“)

但是,一旦在web.config“modules”部分中注册了Spile,请求验证就不会发生(即使关闭了Spile,也不会发生),从而使网站面临跨站点脚本攻击(XSS)

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

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

有没有办法解决这个问题,或者这是一个一瞥中的错误

更新1:

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


我还注意到,我通过在Web.config中设置
来关闭“一瞥”,然后请求验证也会正常启动

ASP.NET中请求验证的工作方式是验证输入,并且仅在第一次调用
request.RawUrl
request.QueryString
时引发异常。Spile在请求的早期(从
RequestMetadata.get_RequestIsAjax
)查找查询字符串,并接受异常,因此在同一请求上下文中对
request.QueryString
的未来调用将不会被验证


FWIW,ASP.NET团队已否认请求验证。有关更多信息,请参阅。

情况不应如此。您能否提供有关您正在使用的Spile和ASP.NET版本、已安装的插件以及复制步骤的信息?我本周从NuGet为ASP.NET 4.0 web表单网站安装了Spile。然后注意到请求验证被破坏。卸下窥视模块可以修复它。给我几分钟-我会发布更多信息。我可以确认,即使没有注册其他模块,问题也是可以重现的。它发生在我安装的其他网站上。我已经用更多信息更新了这个问题(更新1)。谢谢-这似乎是可能的原因。也许我得再加一层保护。我不确定它是否真的被否认了。它提供了一个良好的基本保护级别,并且仍然是4.5中支持的功能。不,它被否认了。默认情况下打开它的唯一原因是为了备份,而不是为了安全。任何提供给我们的与请求验证相关的错误都会立即解决,因为“无法修复”。我在上对此进行了更详细的讨论。因此,基本上没有修复方法,除非在认为请求验证有用时关闭“一瞥”?感谢Levi的更新。我不知道请求验证被拒绝了。在过去,我们做了一些疯狂的事情来避免这种副作用——这一直困扰着我。