Categorias

Bloqueando robôs do seu site

Ser dono de site é padecer no paraíso. Apesar de todas as vantagens de se ter uma presença digital na internet, é um trabalho sem fim para se manter atualizado com as práticas de SEO, lutar contra os erros no seu próprio código, lutar contra os bugs nas ferramentas utilizadas, proteger servidores contra ações de hackers e, dependendo do caso, ainda ter que produzir o conteúdo.

É a sua vida? Então não se esqueça de acrescentar mais uma dor de cabeça na sua rotina: robôs maliciosos. Afinal de contas, nem todo robô que visita seu site é bonzinho como o do Google.

Através de sistemas automatizados, é possível enviar spam para seu site, coletar informações, roubar conteúdo, prejudicar sua banda de dados, derrubar o servidor com excesso de solicitações. Tudo isso com o mínimo de intervenção humana. Haja café e paciência para sobreviver a esses robôs.

Felizmente, também é possível automatizar suas defesas e bloquear a maioria desses inconvenientes, amplificar sua segurança e melhorar, por consequência, a experiência de seus usuários.

Bloqueando robôs usando plugins

O WordPress veio para facilitar a vida dos webmasters e foi por isso que se tornou a plataforma de CMS mais popular no mercado. No rastro da popularidade vieram os plugins, que ajudaram a transformar o WordPress em um ecossistema ainda melhor e mais popular.

Existe plugin para tudo na plataforma, inclusive para bloquear robôs mal-intencionados. Recomendamos duas sugestões gratuitas que já resolvem muitos pepinos, mas que também contam com versões pagas para quem quiser melhorar seu arsenal nessa guerra:

Blackhole for Bad Bots

A ideia desse plugin é simples, mas genial: ele cria uma armadilha para identificar robôs que se comportam mal. Por definição, o arquivo robots.txt é um acordo entre o administrador do site e robôs da internet e um não pode ludibriar o outro. Esse plugin adiciona um link secreto no seu site, proíbe o acesso a ele através do robots.txt e depois bloqueia e bane todos os agentes que desobedecerem a regra.

BBQ: Block Bad Queries

Para bloquear requisições automatizadas no WordPress, esse plugin ajuda a resolver e não se limita a impedir a ação de robôs, mas também oferece proteção contra IPs específicos, referers e outras origens que podem estar saturando a conexão do seu site. O plugin é leve e rápido, além de dispensar configurações mais elaboradas. Você pode até esquecer que ele está ali, mas o plugin irá continuar protegendo seu servidor.

Bloqueando robôs no braço com .htaccess

Embora o uso de plugins seja uma saída bastante prática, ela pode não ser a mais adequada para suas habilidades, seu nível de interesse em bloquear robôs ou mesmo as limitações do seu servidor. A bem de verdade, plugins exigem (além do WordPress, é claro) processamento do servidor, arquivos PHP, banco de dados e um grau de complexidade nos bastidores que pode se tornar uma brecha de segurança no futuro.

A melhor solução para quem tem tempo e não tem medo de sujar as mãos é mexer direto no arquivo .htaccess. Bloquear atividades irregulares nesse arquivo permite uma resposta direta a nível de servidor, no instante em que o robô e o servidor estabelecem uma conexão, sem precisar interagir com nenhum outro arquivo. Em contrapartida, é uma solução que exige cuidado e que pode gerar consequências desagradáveis em caso de erro. Por via das dúvidas, tenha sempre um backup preparado do .htaccess.

Para esses métodos funcionarem, também é fundamental conhecer bem que requisições ou acessos se está bloqueando, para evitar falhas. Se, por um lado, você está evitando a abordagem genérica de um plugin, em troca de um pente fino, por outro lado, você passa a ser o responsável por identificar os agentes maliciosos. Uma análise apurada dos logs do servidor podem fornecer pistas da visita de robôs que precisam ser bloqueados.

Bloqueio por Request URI

Quando um determinado site ou endereço na internet está enviando requisições de forma insistente, algo está errado. É um possível sinal de um scrapper, um script ou serviço que está visitando seu site continuamente para copiar conteúdo. Pode ser também qualquer outra atividade automatizada, mas a verdade é que, se você não está oferecendo uma API ou não possui um serviço público para outros, não há um motivo válido para um site externo estar consultando de forma automática o seu, certo?

Você pode bloquear o site externo a partir do seu endereço ou parte do seu endereço usando regex e .htaccess. É importante frisar que, se você não tomar cuidado com a expressão ou parte do endereço, você pode bloquear acessos legítimos…

Então, vamos supor que os endereços abaixo estão aparecendo sistematicamente em seus logs. Como bloquear?

  • https://www.robomalvado.com.br/golpe/scripts/?scrap=123
  • https://www.robomalvado.com.br/outro/golpe/scripts/?scrap=123456
  • https://www.robomalvado.com.br/outro/golpe/pra-valer/scripts/?scrap=123456789

Você precisa primeiro identificar os padrões e escolher o mais adequado para bloquear. Por exemplo, “/scripts/” costuma ser uma parte muito comum na internet e você não vai querer bloquear seu uso legítimo. Então, vamos tentar o subdiretório “/golpe/”.

Você pode usar:

# Bloqueio por Request URI
RedirectMatch 403 /golpe/

Se, no futuro, surgirem outros padrões, você pode ir adicionando a sua regra no .htacess. Vamos imaginar que outros robôs estejam sendo acionados de um subdiretório “/scam/”. Então, teríamos:

# Bloqueio por Request URI
RedirectMatch 403 /(golpe|scam)/

Bloqueio por User-Agent

User-Agent é tipo o RG do sistema que está tentando acessar seu site. Navegadores enviam essa informação e bots também. Por definição, bots maliciosos nem deveriam enviar uma informação legítima, mas muitos fazem isso. GrabNet, Grafula, GetRight, NetSpider e outros são ferramentas que podem ser utilizadas para copiar informações de sites, por exemplo, com fins absolutamente inocentes (como um usuário tentando “otimizar” sua experiência de navegação ou salvar imagens em massa). Entretanto, você, como webmaster, pode bloquear esses mecanismos.

A lista de robôs suspeitos é grande. Identifique os User-Agents que não são navegadores e mais estão consumindo recursos em seus logs e bloqueie-os no .htacess:

# Bloqueio por User Agent
RewriteEngine On
RewriteCond %{HTTP_USER_AGENT} (GrabNet|Grafula|GetRight|Robozao|OutroRobozao|AdicioneQuantosPrecisar) [NC]
RewriteRule (.*) - [F,L]

Bloqueio por Referrer

Mas, vamos supor que você queira bloquear por completo o domínio original robomalvado.com.br. Como fazer? Use:

# Bloqueio por domínio
RewriteEngine on
RewriteCond %{HTTP_REFERER} robomalvado.com.br [NC]
RewriteRule .* - [F]

Cada Referrer bloqueado exige uma linha adicional de RewriteCond no padrão acima.

Bloqueio por endereço IP

Esse é um recurso muito útil quando se deseja bloquear o acesso de um usuário em particular. Por outro lado, é um bloqueio muito fácil de burlar com proxies, redirecionamentos, camuflagem e outros métodos que agentes maliciosos podem empregar.

Ainda assim, fica o registro, se você estiver pensando em travar um alvo específico, com pouco conhecimento técnico. Nesse cenário, poderíamos ter, por exemplo, um visitante que insiste em publicar spam nos seus comentários ou atacar outros usuários com ofensa. Há formas melhores de se lidar com esse problema (banimento, aviso), mas podemos impedir por completo o acesso do seu IP. A questão aqui é que, se o IP do alvo for dinâmico (como são a maioria dos acessos de usuários comuns por provedores), o endereço dele pode ser alocado para outra pessoa no futuro, que seria injustamente afetada.

Considerando-se os aspectos negativos, você poderia bloquear um endereço IP da seguinte forma:

# Bloqueio por endereço IP
RewriteEngine On
RewriteCond %{REMOTE_ADDR} ^123\.456\.789\.000
RewriteRule (.*) - [F,L]

O código acima bloquearia o IP 123.456.789.000. Perceba que os pontos são precedidos de um “\” para evitar que sejam interpretados como caracteres do tipo “coringa”.

Bloqueio por Querystring

Existem alguns casos bastante específicos de tentativas que podem visar alterar configurações do seu servidor via querystring. Nesse caso, os seguintes comandos são uma boa proteção:

RewriteEngine On
RewriteCond %{QUERY_STRING} proc/self/environ [OR]
RewriteCond %{QUERY_STRING} mosConfig_[a-zA-Z_]{1,21}(=|\%3D) [OR]
RewriteCond %{QUERY_STRING} base64_encode.*(.*) [OR]
RewriteCond %{QUERY_STRING} (<|%3C).*script.*(>|%3E) [NC,OR]
RewriteCond %{QUERY_STRING} GLOBALS(=|[|\%[0-9A-Z]{0,2}) [OR]
RewriteCond %{QUERY_STRING} _REQUEST(=|[|\%[0-9A-Z]{0,2})
RewriteRule .* - [F]