Bloquer les robots avec IIS 7.5 et 8.0

11

Je voudrais bloquer un bot avec IIS. Avec Apache, vous pouvez ajouter une commande à votre fichier .htaccess, comme indiqué ici . Comment pourrais-je accomplir cela avec IIS 7.5?

Mise à jour

En plus de répondre ci-dessous, il y a un total d'approches que j'ai découvert depuis la publication de cette question:

  1. Option d'analyse d'URL répertoriée dans la réponse acceptée.
  2. Définissez une règle de filtrage des demandes (exemple ci-dessous)
  3. Définissez une règle de réécriture d'URL (exemple ci-dessous)

Règle de filtrage des demandes

 <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>

Règle de réécriture d'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>

Pour mon dernier projet, j'ai fini par choisir l'option 2 car elle est axée sur la sécurité et basée sur l'analyse d'URL intégrée intégrée à IIS 7.

Josh
la source

Réponses:

4

Normalement, vous utilisez robots.txt. Cela fonctionnera sur tous les bots bien élevés.

Pour les bots qui ne se comportent pas bien, il y a souvent peu de choses que vous pouvez faire. Vous pouvez limiter le nombre de connexions ou la bande passante dans votre pare-feu ou votre serveur Web, mais les robots principaux utilisent généralement plusieurs adresses IP. La limitation basée sur les chaînes d'agent utilisateur n'est généralement pas une bonne idée, car celles-ci sont triviales pour le bot à usurper, et les bots qui ne se soucient pas de robots.txt ont également tendance à usurper les chaînes d'agent utilisateur. Cela fonctionne dans le cas spécifique où le bot envoie un agent utilisateur correct, mais n'obéit pas au robots.txt.

Edit: Si vous voulez vraiment bloquer en fonction de useragent au lieu de le repousser vers votre pare-feu ou similaire, je pense que la façon la plus simple est d'utiliser URLScan. Vous écrivez une règle qui ressemble à ceci:

[Options]
 RuleList=DenyYandex

[DenyYandex]
 DenyDataSection=Agents
 ScanHeaders=User-Agent

[Agents]
 Yandex
pehrs
la source
2
J'essaie de bloquer Yandex, qui ignore le robots.txt, mais a toujours Yandex dans l'agent utilisateur.
Josh
11

Je sais que c'est une vieille question, mais dans IIS 7.5, vous pouvez refuser par l'agent utilisateur si vous utilisez le filtrage des demandes.

Dans IIS, accédez au site Web auquel vous souhaitez appliquer le filtre, puis dans le volet droit, cliquez sur l' icône Demander le filtrage . (vous devrez peut-être activer cette fonction via le gestionnaire de serveur).

Cliquez sur l' onglet Règles , puis dans la liste la plus à droite, sélectionnez «Ajouter une règle de filtrage»

Donnez-lui un nom, puis dans la section Scan Headers , mettez "User-Agent".

Vous pouvez ajouter n'importe quel type de fichier spécifique à bloquer dans S'applique à , ou vous pouvez le laisser vide pour qu'il s'applique à tous les types de fichiers.

Dans Deny Strings , entrez toutes les chaînes d'agent utilisateur que vous souhaitez bloquer. Dans le cas de cette question, vous mettriez "Yandex" ici.

J'ai confirmé ces modifications dans Chrome à l'aide de l' extension User Agent Switcher .

Josh
la source
6

Pour les robots qui ne respectent pas Robots.txt, vous pouvez utiliser la réécriture d'URL sur le serveur pour bloquer en fonction de leur agent utilisateur, voir: http://chrisfulstow.com/using-the-iis-7url-rewrite-module-to- blocs-chenilles /

Voici un moyen simple d'empêcher les principaux robots d'indexation Web - Google Bing et Yahoo - d'indexer n'importe quel site sur un serveur entier. Ceci est vraiment utile si vous envoyez toutes vos versions bêta à un serveur public, mais que vous ne voulez pas qu'elles soient indexées par les moteurs de recherche.

  1. Installez le module de réécriture d'URL IIS.

  2. Au niveau du serveur, ajoutez une règle de blocage des demandes. Bloquer les en-têtes d'agent utilisateur correspondant à l'expression régulière: googlebot | msnbot | slurp.

Ou, collez simplement cette règle dans «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>

Cela empêchera Google, Bing et Yahoo d'indexer tout site publié sur le serveur. Pour le tester, essayez le Firefox User Agent Switcher .

Pour plus d'informations: http://www.iis.net/download/URLRewrite

Carlos Aguilar Mares
la source
Je ne suis pas sûr que recommander la mise à jour de l'applicationHost.config pour ajouter des règles de réécriture soit une bonne idée - ne devraient-ils pas simplement aller dans web.config?
Blakomen
A partir de 2016, il y a aussi ceci: saotn.org/hackrepair-bad-bots-htaccess-web-config-iis
Dawesi