Blockieren Sie Bots mit IIS 7.5 und 8.0

11

Ich möchte einen Bot mit IIS blockieren. Mit Apache können Sie Ihrer .htaccess-Datei einen Befehl hinzufügen, wie hier beschrieben . Wie würde ich dies mit IIS 7.5 erreichen?

Aktualisieren

Zusätzlich zur folgenden Antwort gibt es insgesamt Ansätze, die ich seit dem Posten dieser Frage entdeckt habe:

  1. URL-Scan-Option in der akzeptierten Antwort aufgeführt.
  2. Definieren Sie eine Anforderungsfilterregel (Beispiel unten)
  3. Definieren Sie eine URL-Umschreibungsregel (Beispiel unten)

Filterregel anfordern

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

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

Bei meinem letzten Projekt habe ich mich für Option 2 entschieden, da diese sicherheitsorientiert ist und auf dem in IIS 7 integrierten integrierten URL-Scan basiert.

Josh
quelle

Antworten:

4

Normalerweise verwenden Sie robots.txt. Es funktioniert bei allen gut erzogenen Bots.

Für Bots, die sich nicht gut benehmen, können Sie oft wenig tun. Sie können die Anzahl der Verbindungen oder die Bandbreite in Ihrer Firewall oder Ihrem Webserver begrenzen. Bei großen Bots werden jedoch normalerweise mehrere IP-Adressen verwendet. Das Einschränken basierend auf User-Agent-Strings ist normalerweise keine gute Idee, da diese für den Bot trivial sind und Bots, die sich nicht für robots.txt interessieren, auch dazu neigen, User-Agent-Strings zu fälschen. Dies funktioniert in dem speziellen Fall, in dem der Bot einen korrekten Benutzeragenten sendet, die robots.txt jedoch nicht befolgt.

Bearbeiten: Wenn Sie wirklich basierend auf Useragent blockieren möchten, anstatt es zurück in Ihre Firewall oder ähnliches zu verschieben, ist es meiner Meinung nach am einfachsten, URLScan zu verwenden. Sie schreiben eine Regel, die ungefähr so ​​aussieht:

[Options]
 RuleList=DenyYandex

[DenyYandex]
 DenyDataSection=Agents
 ScanHeaders=User-Agent

[Agents]
 Yandex
pehrs
quelle
2
Ich versuche, Yandex zu blockieren, wodurch die robots.txt ignoriert wird, Yandex jedoch konsistent im Benutzeragenten enthalten ist.
Josh
11

Ich weiß, dass dies eine alte Frage ist, aber in IIS 7.5 können Sie dies vom Benutzeragenten ablehnen, wenn Sie die Anforderungsfilterung verwenden.

Gehen Sie in IIS zu der Website, auf die Sie den Filter anwenden möchten, und klicken Sie dann im rechten Bereich auf das Symbol Filter anfordern . (Möglicherweise müssen Sie diese Funktion über den Server-Manager aktivieren.)

Klicken Sie auf die Registerkarte Regeln und wählen Sie dann in der Liste ganz rechts "Filterregel hinzufügen" aus.

Geben Sie ihm einen Namen und geben Sie im Abschnitt " Scan-Header " "User-Agent" ein.

Sie können beliebige Dateitypen hinzufügen, die in " Gilt für" blockiert werden sollen , oder Sie können sie leer lassen, damit sie auf alle Dateitypen angewendet werden.

In Deny Strings , geben Sie alle der User - Agent - Strings Sie blockieren möchten. Im Fall dieser Frage würden Sie hier "Yandex" einfügen.

Ich habe diese Änderungen in Chrome mit der User Agent Switcher- Erweiterung bestätigt.

Josh
quelle
6

Für Crawler, die Robots.txt nicht respektieren, können Sie URL Rewrite auf dem Server verwenden, um basierend auf ihrem Benutzeragenten zu blockieren. Siehe: http://chrisfulstow.com/using-the-iis-7url-rewrite-module-to- Block-Crawler /

Hier ist eine einfache Möglichkeit, die wichtigsten Webcrawler - Google Bing und Yahoo - daran zu hindern, Websites auf einem gesamten Server zu indizieren. Dies ist sehr nützlich, wenn Sie alle Ihre Beta-Builds auf einen öffentlich zugänglichen Server übertragen, diese aber noch nicht von den Suchmaschinen indiziert werden möchten.

  1. Installieren Sie das IIS URL Rewrite Module.

  2. Fügen Sie auf Serverebene eine Anforderungsblockierungsregel hinzu. Blockieren Sie User-Agent-Header, die dem regulären Ausdruck entsprechen: googlebot | msnbot | slurp.

Oder fügen Sie diese Regel einfach in "C: \ Windows \ System32 \ inetsrv \ config \ applicationHost.config" ein.

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

Dadurch wird verhindert, dass Google, Bing und Yahoo auf dem Server veröffentlichte Websites indizieren. Probieren Sie zum Testen den Firefox User Agent Switcher aus .

Für weitere Informationen: http://www.iis.net/download/URLRewrite

Carlos Aguilar Stuten
quelle
Ich bin mir nicht sicher, ob es eine gute Idee ist, die applicationHost.config zu aktualisieren, um Umschreiberegeln hinzuzufügen. Sollten sie nicht einfach in web.config gespeichert werden?
Blakomen
Ab 2016 gibt es auch Folgendes
Dawesi