使用 IIS 7.5 和 8.0 阻止机器人

使用 IIS 7.5 和 8.0 阻止机器人

我想使用 IIS 阻止机器人。使用 Apache,您可以向 .htaccess 文件添加命令,如下所示此处概述。如何使用 IIS 7.5 实现这一点?

更新

除了以下答案之外,自发布此问题以来,我还发现了总共几种方法:

  1. 接受的答案中列出了 URL 扫描选项。
  2. 定义请求过滤规则(下面的示例)
  3. 定义 URL 重写规则(如下例所示)

请求过滤规则

 <system.webServer>
    <security>
      <requestFiltering>
        <filteringRules>
          <filteringRule name="BlockSearchEngines" scanUrl="false" scanQueryString="false">
            <scanHeaders>
              <clear />
              <add requestHeader="User-Agent" />
            </scanHeaders>
            <appliesTo>
              <clear />
            </appliesTo>
            <denyStrings>
              <clear />
              <add string="YandexBot" />
            </denyStrings>
          </filteringRule>
        </filteringRules>
      </requestFiltering>
    </security>
    [...]
 </system.webServer>

URL 重写规则

<rule name="RequestBlockingRule1" patternSyntax="Wildcard" stopProcessing="true">
                    <match url="*" />
                    <conditions>
                        <add input="{HTTP_USER_AGENT}" pattern="YandexBot" />
                    </conditions>
                    <action type="CustomResponse" statusCode="403" statusReason="Forbidden: Access is denied." statusDescription="Get Lost." />
                </rule>

对于我的上一个项目,我最终选择了选项 2,因为它以安全性为重点并且基于 IIS 7 内置的集成 URL 扫描。

答案1

通常情况下,您使用 robots.txt。它适用于所有行为良好的机器人。

对于行为不当的机器人,您通常无能为力。您可以在防火墙或网络服务器中限制连接数或带宽,但主要机器人通常会使用多个 IP 地址。基于用户代理字符串进行限制通常不是一个好主意,因为这些对于机器人来说很容易欺骗,并且不关心 robots.txt 的机器人也倾向于欺骗用户代理字符串。它在特定情况下有效,即机器人发送正确的用户代理,但不遵守 robots.txt。

编辑:如果您确实想根据用户代理进行阻止,而不是将其推回防火墙或类似程序,我认为最简单的方法是使用 URLScan。您可以编写一条如下所示的规则:

[Options]
 RuleList=DenyYandex

[DenyYandex]
 DenyDataSection=Agents
 ScanHeaders=User-Agent

[Agents]
 Yandex

答案2

我知道这是一个老问题,但是在 IIS 7.5 中,如果您使用请求过滤,则可以通过用户代理拒绝。

在 IIS 中,转到要应用过滤器的网站,然后在右侧窗格中单击请求过滤图标。(您可能必须通过服务器管理器启用此功能)。

点击规则选项卡,然后在最右侧列表中选择“添加过滤规则”

给它起个名字,然后在扫描标题部分,输入“User-Agent”。

您可以添加任何特定文件类型来阻止适用于,或者您可以将其留空以使其适用于所有文件类型。

拒绝字符串,输入您要阻止的所有用户代理字符串。对于这个问题,您可以在此处输入“Yandex”。

我使用 chrome 确认了这些更改用户代理切换器扩大。

答案3

对于不遵守 Robots.txt 的爬虫程序,您可以在服务器上使用 URL Rewrite 根据其用户代理进行阻止,请参阅: http://chrisfulstow.com/using-the-iis-7url-rewrite-module-to-block-crawlers/

这是一种简单的方法,可以阻止主要的网络爬虫(Google Bing 和 Yahoo)在整个服务器上索引任何网站。如果您将所有测试版本推送到面向公众的服务器,但又不希望搜索引擎索引它们,这种方法非常有用。

  1. 安装 IIS URL 重写模块。

  2. 在服务器级别,添加请求阻止规则。阻止与正则表达式匹配的用户代理标头:googlebot|msnbot|slurp。

或者,只需将此规则粘贴到“C:\Windows\System32\inetsrv\config\applicationHost.config”

<system.webServer>
   <rewrite>
      <globalRules>
         <rule name="RequestBlockingRule1" stopProcessing="true">
            <match url=".*" />
            <conditions>
               <add input="{HTTP_USER_AGENT}" pattern="googlebot|msnbot|slurp" />
            </conditions>
            <action type="CustomResponse" statusCode="403"
               statusReason="Forbidden: Access is denied."
               statusDescription="You do not have permission to view this page." />
         </rule>
      </globalRules>
   </rewrite>
</system.webServer>

这将阻止 Google、Bing 和 Yahoo 索引服务器上发布的任何网站。要测试它,请尝试Firefox 用户代理切换器

更多信息:http://www.iis.net/download/URLRewrite

相关内容