如何让 IIS 7 在请求验证之前执行“请求过滤”

如何让 IIS 7 在请求验证之前执行“请求过滤”

我想使用 IIS 7.5 中的请求过滤功能来过滤掉我们从某些机器人那里收到的一些恶意请求。这些请求触发了“System.Web.HttpException:从客户端检测到一个潜在危险的 Request.Path 值”,我不想在我们的应用程序配置中为此提出理由。但是在请求过滤功能中添加拒绝这些请求的规则不会产生任何效果,因为显然请求验证首先发生。有没有关于如何在验证发生之前使用 IIS 过滤这些不良请求的想法?

答案1

根据我的经验并使用失败请求跟踪,只要运行任何 .NET 代码,就会发生针对 Request.Path 的验证错误。请求跟踪模块早在开始请求管道时就运行。

如果您有一个在开始请求事件期间执行的托管 .NET 模块(下面的示例)。

using System;
using System.Web;

namespace Test
{
    public sealed class CustomModule : IHttpModule
    {
        public void Dispose()
        {
        }

        public void Init(HttpApplication context)
        {
            context.BeginRequest += context_BeginRequest;
        }

        void context_BeginRequest(object sender, EventArgs e)
        {
            // Main .NET Code Here
        }
    }
}

请确保此模块运行请求过滤模块。

  • 使用 IIS 管理器,单击“模块”。
  • 点击查看有序列表
  • 确保任何托管的 .NET 模块都放置在请求过滤模块。

这保证了请求过滤模块在任何可能的 .NET 代码之前运行。希望在这种情况下,即使请求具有无效的 Request.Path 值,它也应该在出现任何可见错误之前被请求过滤模块拾取。

相关内容