Blocco dei robot con IIS 7.5 e 8.0


11

Vorrei bloccare un bot con IIS. Con Apache puoi aggiungere un comando al tuo file .htaccess, come indicato qui . Come realizzerei questo con IIS 7.5?

Aggiornare

Oltre a rispondere di seguito, ci sono un totale di approcci che ho scoperto da quando ho pubblicato questa domanda:

  1. Opzione di scansione URL elencata nella risposta accettata.
  2. Definire una regola di filtro richieste (esempio seguente)
  3. Definire una regola di riscrittura URL (esempio di seguito)

Richiedi regola filtro

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

Regola di riscrittura 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>

Per il mio ultimo progetto ho finito con l'opzione 2 poiché è incentrato sulla sicurezza e basato sulla scansione URL integrata integrata in IIS 7.

Risposte:


4

Normalmente usi robots.txt. Funzionerà su tutti i robot ben educati.

Per i robot che non si comportano bene, spesso c'è poco da fare. È possibile limitare il numero di connessioni o la larghezza di banda nel firewall o nel server Web, ma i bot principali in genere utilizzano più indirizzi IP. Limitare in base alle stringhe user-agent di solito non è una buona idea, in quanto questi sono banali per lo spoofing del bot e anche i robot che non si preoccupano dei robot.txt hanno la tendenza a falsificare anche le stringhe useragent. Funziona nel caso specifico quando il bot invia un programma utente corretto, ma non obbedisce a robots.txt.

Modifica: se vuoi veramente bloccare in base all'agente utente invece di rimandarlo al tuo firewall o simili, penso che il modo più semplice sia usare URLScan. Scrivi una regola simile a questa:

[Options]
 RuleList=DenyYandex

[DenyYandex]
 DenyDataSection=Agents
 ScanHeaders=User-Agent

[Agents]
 Yandex

2
Sto cercando di bloccare Yandex, che ignora il file robots.txt, ma ha costantemente Yandex nell'agente utente.
Josh,

11

So che questa è una vecchia domanda, ma in IIS 7.5 è possibile negare dal programma utente se si utilizza il filtro richieste.

In IIS, vai al sito Web a cui desideri applicare il filtro, quindi nel riquadro destro fai clic sull'icona Filtro richieste . (potrebbe essere necessario abilitare questa funzione tramite Server Manager).

Fai clic sulla scheda Regole , quindi, lungo l'elenco all'estrema destra, seleziona "Aggiungi regola di filtro"

Dagli un nome, quindi nella sezione Intestazioni di scansione , inserisci "User-Agent".

Puoi aggiungere qualsiasi tipo di file specifico da bloccare in Applies To , oppure puoi lasciarlo vuoto per applicarlo a tutti i tipi di file.

In Nega stringhe , inserisci tutte le stringhe dell'agente utente che desideri bloccare. Nel caso di questa domanda, inseriresti "Yandex" qui.

Ho confermato queste modifiche in Chrome utilizzando l' estensione User Agent Switcher .


6

Per i crawler che non rispettano Robots.txt, puoi utilizzare URL Rewrite sul server per bloccare in base al loro User Agent, vedi: http://chrisfulstow.com/using-the-iis-7url-rewrite-module-to- block-cingoli /

Ecco un modo semplice per impedire ai principali crawler Web, Google Bing e Yahoo, di indicizzare qualsiasi sito su un intero server. Ciò è molto utile se si trasferiscono tutte le build beta su un server pubblico, ma non si desidera che vengano ancora indicizzate dai motori di ricerca.

  1. Installa il modulo di riscrittura URL IIS.

  2. A livello di server, aggiungere una regola di blocco delle richieste. Blocca le intestazioni user-agent corrispondenti a regex: googlebot | msnbot | slurp.

Oppure, basta incollare questa regola in "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>

Ciò impedirà a Google, Bing e Yahoo di indicizzare qualsiasi sito pubblicato sul server. Per provarlo, prova lo Switcher User Agent di Firefox .

Per maggiori informazioni: http://www.iis.net/download/URLRewrite


Non sono sicuro che raccomandare di aggiornare applicationHost.config per aggiungere regole di riscrittura sia una buona idea: non dovrebbero semplicemente andare in web.config?
Blakomen,

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.