Blokuj boty w IIS 7.5 i 8.0

11

Chciałbym zablokować bota za pomocą IIS. Za pomocą Apache możesz dodać polecenie do pliku .htaccess, jak opisano tutaj . Jak mam to osiągnąć za pomocą IIS 7.5?

Aktualizacja

Oprócz odpowiedzi poniżej, istnieje wiele metod, które odkryłem od czasu opublikowania tego pytania:

  1. Opcja skanowania adresu URL wymieniona w zaakceptowanej odpowiedzi.
  2. Zdefiniuj regułę filtrowania żądań (przykład poniżej)
  3. Zdefiniuj regułę przepisywania adresów URL (przykład poniżej)

Żądaj reguły filtrowania

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

Reguła przepisywania adresów 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>

W ostatnim projekcie skończyłem z opcją 2, ponieważ jest ona skoncentrowana na bezpieczeństwie i oparta na zintegrowanym skanowaniu adresów URL wbudowanym w IIS 7.

Josh
źródło

Odpowiedzi:

4

Zwykle używasz pliku robots.txt. Będzie działać na wszystkich dobrze wychowanych botach.

W przypadku botów, które nie są dobrze wychowane, często niewiele można zrobić. Możesz ograniczyć liczbę połączeń lub przepustowość w swojej zaporze ogniowej lub serwerze internetowym, ale główne boty zwykle używają wielu adresów IP. Ograniczanie na podstawie ciągów użytkownika-agenta zwykle nie jest dobrym pomysłem, ponieważ są one trywialne dla bota do fałszowania, a boty, które nie dbają o plik robots.txt, również mają tendencję do fałszowania ciągów użytkownika. Działa w konkretnym przypadku, gdy bot wysyła poprawnego agenta użytkownika, ale nie przestrzega pliku robots.txt.

Edycja: Jeśli naprawdę chcesz blokować na podstawie agenta użytkownika zamiast wypychać go z powrotem do zapory lub podobnego narzędzia, myślę, że najłatwiejszym sposobem jest użycie URLScan. Piszesz regułę, która wygląda mniej więcej tak:

[Options]
 RuleList=DenyYandex

[DenyYandex]
 DenyDataSection=Agents
 ScanHeaders=User-Agent

[Agents]
 Yandex
pehrs
źródło
2
Próbuję zablokować Yandex, który ignoruje plik robots.txt, ale konsekwentnie ma Yandex w kliencie użytkownika.
Josh
11

Wiem, że to stare pytanie, ale w IIS 7.5 możesz odmówić przez użytkownika, jeśli używasz filtrowania żądań.

W usługach IIS przejdź do witryny, w której chcesz zastosować filtr, a następnie w prawym okienku kliknij ikonę Żądaj filtrowania . (może być konieczne włączenie tej funkcji za pośrednictwem menedżera serwera).

Kliknij kartę Reguły , a następnie wzdłuż listy po prawej stronie wybierz „Dodaj regułę filtrowania”

Nadaj mu nazwę, a następnie w sekcji Skanuj nagłówki wpisz „User-Agent”.

Możesz dodać dowolny określony typ pliku (-ów) do zablokowania w Dotyczy Dotyczy lub możesz pozostawić to pole puste, aby dotyczyło wszystkich typów plików.

W Odmów ciągów wprowadź wszystkie ciągi klienta użytkownika, które chcesz zablokować. W przypadku tego pytania wstawiłbyś tutaj „Yandex”.

Potwierdziłem te zmiany w chrome przy użyciu rozszerzenia User Agent Switcher .

Josh
źródło
6

W przypadku przeszukiwaczy, które nie przestrzegają pliku Robots.txt, można użyć przepisywania adresów URL na serwerze w celu blokowania w oparciu o ich agenta użytkownika, patrz: http://chrisfulstow.com/using-the-iis-7url-rewrite-module-to- roboty blokowe /

Oto prosty sposób na zablokowanie głównych robotów indeksujących - Google Bing i Yahoo - przed indeksowaniem dowolnej witryny na całym serwerze. Jest to bardzo przydatne, jeśli przesyłasz wszystkie wersje beta na publiczny serwer, ale nie chcesz, aby były one jeszcze indeksowane przez wyszukiwarki.

  1. Zainstaluj moduł przepisywania adresów URL IIS.

  2. Na poziomie serwera dodaj regułę blokowania żądań. Blokuj nagłówki klienta użytkownika pasujące do wyrażenia regularnego: googlebot | msnbot | slurp.

Lub po prostu wklej tę regułę do „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>

Spowoduje to zablokowanie indeksowania witryn opublikowanych na serwerze przez Google, Bing i Yahoo. Aby to przetestować, wypróbuj Firefox User Agent Switcher .

Aby uzyskać więcej informacji: http://www.iis.net/download/URLRewrite

Carlos Aguilar Mares
źródło
Nie jestem pewien, czy zalecanie aktualizacji pliku applicationHost.config w celu dodania reguł przepisywania jest dobrym pomysłem - czy nie powinny one wchodzić tylko w web.config?
Blakomen