Bloquear robôs com o IIS 7.5 e 8.0

11

Eu gostaria de bloquear um bot com o IIS. Com o Apache, você pode adicionar um comando ao seu arquivo .htaccess, conforme descrito aqui . Como eu faria isso com o IIS 7.5?

Atualizar

Além da resposta abaixo, há um total de abordagens descobertas desde a publicação desta pergunta:

  1. Opção de verificação de URL listada na resposta aceita.
  2. Definir uma regra de Filtragem de Solicitações (exemplo abaixo)
  3. Defina uma regra de reconfiguração de URL (exemplo abaixo)

Regra de filtro de solicitação

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

Regra de reconfiguração de 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>

No meu último projeto, finalizei a opção 2, pois ela é focada na segurança e baseada na verificação de URL integrada incorporada no IIS 7.

Josh
fonte

Respostas:

4

Normalmente você usa o robots.txt. Ele funcionará em todos os bots bem comportados.

Para bots que não são bem comportados, geralmente há pouco que você pode fazer. Você pode limitar a contagem de conexões ou a largura de banda em seu firewall ou servidor da web, mas os principais bots normalmente usam vários endereços IP. Limitar com base nas seqüências de agente do usuário geralmente não é uma boa idéia, pois essas são triviais para o bot falsificar, e os bots que não se importam com o robots.txt tendem a falsificar também as sequências de usuários. Funciona no caso específico quando o bot envia um agente de usuário correto, mas não obedece ao robots.txt.

Edit: Se você realmente deseja bloquear com base no useragent em vez de enviá-lo de volta para o firewall ou algo semelhante, acho que a maneira mais fácil é usar o URLScan. Você escreve uma regra que se parece com isso:

[Options]
 RuleList=DenyYandex

[DenyYandex]
 DenyDataSection=Agents
 ScanHeaders=User-Agent

[Agents]
 Yandex
pehrs
fonte
2
Estou tentando bloquear o Yandex, que ignora o robots.txt, mas sempre o possui no agente do usuário.
21711 Josh
11

Sei que essa é uma pergunta antiga, mas no IIS 7.5 você pode negar pelo agente do usuário se usar a Filtragem de solicitações.

No IIS, acesse o site em que deseja aplicar o filtro e, no painel direito, clique no ícone Solicitar filtragem . (pode ser necessário ativar esse recurso através do gerenciador de servidores).

Clique na guia Regras e, na lista à direita, selecione "Adicionar regra de filtragem"

Dê um nome e, em seguida, na seção Scan Headers , coloque "User-Agent".

Você pode adicionar qualquer tipo de arquivo específico para bloquear no Aplica-se a , ou pode deixá-lo em branco para aplicá-lo a todos os tipos de arquivo.

Em Negar Strings , insira todas as strings do agente do usuário que você deseja bloquear. No caso desta pergunta, você colocaria "Yandex" aqui.

Confirmei essas alterações no chrome usando a extensão User Agent Switcher .

Josh
fonte
6

Para rastreadores que não respeitam o Robots.txt, você pode usar a reconfiguração de URL no servidor para bloquear com base no agente do usuário, consulte: http://chrisfulstow.com/using-the-iis-7url-rewrite-module-to- rastreadores de bloco /

Aqui está uma maneira fácil de impedir que os principais rastreadores da Web - Google Bing e Yahoo - indexem qualquer site em um servidor inteiro. Isso é realmente útil se você enviar todas as suas versões beta para um servidor público, mas não quiser que elas sejam indexadas ainda pelos mecanismos de pesquisa.

  1. Instale o módulo de reconfiguração de URL do IIS.

  2. No nível do servidor, adicione uma regra de bloqueio de solicitação. Bloqueie os cabeçalhos de agente do usuário que correspondam ao regex: googlebot | msnbot | slurp.

Ou cole esta regra em "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>

Isso impedirá o Google, Bing e Yahoo de indexar qualquer site publicado no servidor. Para testá-lo, tente o Firefox User Agent Switcher .

Para mais informações: http://www.iis.net/download/URLRewrite

Carlos Aguilar Mares
fonte
Não tenho certeza de que recomendar a atualização do applicationHost.config para adicionar regras de reescrita é uma boa idéia - eles não devem apenas entrar no web.config?
Blakomen
A partir de 2016, há também o seguinte: saotn.org/hackrepair-bad-bots-htaccess-web-config-iis
Dawesi