【问题标题】:Using ValidateRequest="true" with HttpHandlers将 ValidateRequest="true" 与 HttpHandlers 一起使用
【发布时间】:2011-08-17 21:36:23
【问题描述】:

我在 web.config 的 HttpHandlers 部分设置了一个 HTTP 处理程序,如下所示:

<add path="myNamespace.myHandler.axd" verb="*" type="myNamespace.myHandler, myNamespace" validate="false"/>

PCI 扫描突出显示了此处理程序中的一个漏洞,这使其容易受到 XSS 攻击。基本上你可以通过查询字符串传递一个标签,然后 httphandler 将标签直接转储到原始格式的响应中 - 哎哟!

我无权访问此处理程序的源代码,因此我一直在尝试使用带有以下标记的 asp.net 关闭此漏洞:

<location path="myNamespace.myHandler.axd">
    <system.web>
        <pages validateRequest="true">
        </pages>
    </system.web>
</location>

但是这不起作用。查询字符串未被验证,标签仍在通过。

我正在使用 asp.net 3.5 运行 IIS7。

谁能帮忙?

干杯, 帕特

【问题讨论】:

  • 只是为了关闭它,最后我只是通过应用程序升级到 asp.net 4.0。这似乎是最简单的方法。

标签: asp.net iis-7 xss validate-request


【解决方案1】:

据我所知,在 asp.net 3.5 中使用配置设置启用通用 http 处理程序的请求验证没有简单的方法。然而,在 .net 1.1 中引入了一些 validation methods,我相信(不是 100% 肯定)与默认请求验证中使用的标准相同。

4.0 introduced 全面的默认请求验证,带有恢复到 2.0 设置的选项。

在我看来,您有两个选择:

  • 手动处理验证 代码中的某处
  • 升级到 .net 4.0 并获得默认请求验证的好处

【讨论】:

  • 只是一个想法。是否有可能开发一种通用的“包装器”HttpHandler,为 asp.net 3.5 中的 HttpHandlers 提供这种请求验证。然后,您将从 web.config 中删除原始的 HttpHandler,并将包装器放在它的位置。当请求包装器时,它将验证请求,然后即时实例化原始 HttpHandler 将请求发送给它,然后将响应重定向回最终用户。
  • 老实说,我从未尝试过这样的事情,但考虑到您的情况,这听起来是一个合理的解决方案。
猜你喜欢
  • 1970-01-01
  • 2019-11-18
  • 2020-09-28
  • 1970-01-01
  • 1970-01-01
  • 2017-04-14
  • 1970-01-01
  • 1970-01-01
  • 2018-10-06
相关资源
最近更新 更多