使用 IIS 7.5 和 8.0 阻止机器人

Jos*_*osh 13 iis iis-7.5

我想用 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>
Run Code Online (Sandbox Code Playgroud)

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>
Run Code Online (Sandbox Code Playgroud)

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

Jos*_*osh 13

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

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

单击“规则”选项卡,然后沿着最右侧的列表选择“添加过滤规则”

给它一个名字,然后在“扫描标题”部分,输入“用户代理”。

您可以在“应用到”中添加要阻止的任何特定文件类型,也可以将其留空以使其适用于所有文件类型。

Deny Strings 中,输入您要阻止的所有用户代理字符串。在此问题的情况下,您可以将“Yandex”放在这里。

我使用User Agent Switcher扩展在 chrome 中确认了这些更改。


Car*_*res 9

对于不尊重 Robots.txt 的爬虫,你可以使用服务器上的 URL Rewrite 根据他们的 User Agent 进行拦截,参见:http : //chrisfulstow.com/using-the-iis-7url-rewrite-module-to-块爬虫/

这是阻止主要网络爬虫——谷歌必应和雅虎——在整个服务器上索引任何站点的简单方法。如果您将所有 beta 版本推送到面向公众的服务器,但不希望搜索引擎将它们编入索引,这将非常有用。

  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>
Run Code Online (Sandbox Code Playgroud)

这将阻止 Google、Bing 和 Yahoo 将服务器上发布的任何站点编入索引。要测试它,请尝试Firefox User Agent Switcher

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


peh*_*hrs 5

通常您使用robots.txt。它适用于所有表现良好的机器人。

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

编辑:如果您真的想基于 useragent 进行阻止而不是将其推回防火墙或类似设备,我认为最简单的方法是使用 URLScan。你写了一个看起来像这样的规则:

[Options]
 RuleList=DenyYandex

[DenyYandex]
 DenyDataSection=Agents
 ScanHeaders=User-Agent

[Agents]
 Yandex
Run Code Online (Sandbox Code Playgroud)

  • 我试图阻止 Yandex,它忽略了 robots.txt,但始终在用户代理中包含 Yandex。 (2认同)