我们的网站上线了,当然,我们开始收到大量的探测请求, 喜欢
'/博客/可湿性粉剂的login.php'
'/admin/admin.php'
等。
所以问题是,你用它们做什么?
现在在每种情况下都会抛出404错误并且elmah会发送有关它的电子邮件,但我认为最好至少忽略所有的php请求。
如何做到这一点,这样的请求会最低限度地加载服务器,可能是这样,asp.net管道不会参与此类请求?
或者重定向或返回空结果更好?
如果需要简单地添加IgnoreRoutes,可能有人拥有良好的路由集,这会忽略大多数探测请求?
答案 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>
的信息
答案 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。