ASP.NET MVC3 - 您如何处理探测请求?

Gie*_*ius 8 asp.net asp.net-mvc iis-7 asp.net-mvc-3

我们的网站上线了,当然,我们开始接收大量的探测请求,比如

'/blog/wp-login.php'
'/admin/admin.php'

等等.
所以问题是,你怎么跟他们做什么?

现在在每种情况下都会抛出404错误,elmah会发送有关它的电子邮件,但我认为最好至少忽略所有的php请求.

如何做到这一点,这样的请求将最低限度地加载服务器,可能有可能,asp.net管道将不参与此类请求?
或者重定向或返回空结果更好?

如果需要简单地添加IgnoreRoutes,可能有人有好的路由集,这会忽略大多数探测请求?

Tom*_*mmy 10

我知道你已经声明你不想在IIS中使用重写模块,因为它"在IIS上增加了额外的负载",但实际上,使用IIS来处理这些将比传入你的应用程序做的更少.同样的事情(即使两者都是非常小的资源方面).如果您想在IIS和带宽上以最小的负载量忽略该请求,我建议如下

<rewrite>
  <rules>
    <rule name="Fail PHP requests">
      <match url=".*"/>
      <conditions>
        <add input="{URL}" pattern="*.php*" />
      </conditions>
      <action type="AbortRequest" />
    </rule>
   </rules>
</rewrite>
Run Code Online (Sandbox Code Playgroud)

使用设置为AbortRequest的操作类型重写完全切断HTTP连接并删除请求,不返回404或403错误.摘自"创建访问块"部分中的" 学习IIS ".

编辑 - 由于OP对使用重写模块和性能存在担忧,我将提交第二个选项,该选项仍然可以在不使用重写模块的情况下捕获.php请求.IIS7及更高版本也支持请求过滤,根据Learn IIS,请求过滤是......

请求过滤模块通过处理BeginRequest事件在请求处理管道的开头运行.模块评估请求元数据,例如标题,查询字符串,内容长度等,以便确定请求元数据是否与任何现有过滤器匹配.如果匹配,则模块生成404(找不到文件)响应,然后快捷键切换IIS管道的其余部分

要实现,请将以下部分添加到web.config:

<configuration>
 <system.webServer>
  <security>
   <requestFiltering>
    <fileExtensions allowUnlisted="true" >
     <add fileExtension=".php" allowed="false"/>
    </fileExtensions>
   </requestFiltering>
  </security>
 </system.webServer>
</configuration>
Run Code Online (Sandbox Code Playgroud)

来自URL重写与请求过滤使用请求过滤的信息