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

时间:2011-11-14 07:54:14

标签: asp.net asp.net-mvc asp.net-mvc-3 iis-7

我们的网站上线了,当然,我们开始收到大量的探测请求, 喜欢

  

'/博客/可湿性粉剂的login.php'
  '/admin/admin.php'

等。
所以问题是,你用它们做什么?

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

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

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

3 个答案:

答案 0 :(得分: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>

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

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

来自URL Rewrite vs Request FilteringUsing Request Filtering

的信息

答案 1 :(得分:3)

这是我在web.config中我的一个项目中使用PHP的子应用程序:

<system.webServer>
    <rewrite>
        <rules>
            <rule name="ignorePhp" patternSyntax="Wildcard">
                <match url="*" />
                <conditions>
                    <add input="{URL}" pattern="*.php*" />
                </conditions>
                <action type="CustomResponse" statusCode="403" />
            </rule>
        </rules>
    </rewrite>
</system.webServer>

更新

您也可以查看this post

答案 2 :(得分:1)

您可以查看following article