Como Bloquear o Acesso do Usuário às Páginas Servlet Usando HTTP_REFERER no Apache

À medida que as aplicações web crescem, cresce também a necessidade de proteger páginas sensíveis e salvaguardá-las contra acessos não autorizados, especialmente por bots automatizados. Se você se encontra em uma situação em que precisa bloquear o acesso de usuários a certas páginas servlet diretamente, mas não tem a capacidade de modificar o servidor da aplicação, então usar o cabeçalho HTTP_REFERER do Apache pode ser parte da sua solução.

Neste post, exploraremos como bloquear efetivamente o acesso usando HTTP_REFERER no seu arquivo .htaccess, detalhando os passos e fornecendo exemplos claros para ajudá-lo a alcançar seu objetivo.

Entendendo o HTTP_REFERER

O HTTP_REFERER é um cabeçalho HTTP que identifica o endereço da página web que vinculou ao recurso sendo solicitado. Resumindo, ele informa ao seu servidor de onde um usuário veio antes de acessar uma página específica.

Por Que Usar HTTP_REFERER para Bloquear Acesso?

  1. Medida de Segurança: Embora não seja infalível, serve como uma barreira inicial contra acessos não autorizados.
  2. Facilidade de Implementação: Se você tiver controle sobre o servidor web, mas não sobre a lógica da aplicação, essa é uma abordagem prática.
  3. Prevenção de Solicitações Automatizadas: Bloquear solicitações diretas de fontes externas ou bots é crucial se você quiser manter seus formulários seguros e funcionais apenas por meios legítimos.

Configurando as Regras de Rewrite no .htaccess

Para implementar o bloqueio com base no HTTP_REFERER, você precisará adicionar regras ao seu arquivo .htaccess. Aqui está como você pode estruturar suas regras de forma eficaz.

Regra Básica de Rewrite

Você pode começar com uma regra simples assim:

RewriteEngine on 

RewriteCond %{HTTP_REFERER} !^http://meusite.com(.cl)?/.* [NC]
RewriteRule (servlet1|servlet2)/.+ - [F]

Explicação:

  • RewriteEngine on: Ativa o mecanismo de reescrita.
  • RewriteCond verifica se o HTTP_REFERER não corresponde ao seu site especificado.
  • RewriteRule direciona solicitações para servlet1 ou servlet2.

Regra de Rewrite Aprimorada

No entanto, se você quiser refinar suas verificações para permitir apenas solicitações legítimas que venham do seu site e bloquear aquelas com strings de consulta, você precisará de uma lógica mais complexa:

RewriteCond %{HTTP_REFERER} !^http://meusite.com(.cl)?/.* [NC]
RewriteCond %{QUERY_STRING} ^.+$ [OR]
RewriteCond %{REQUEST_METHOD} ^POST$ [OR]
RewriteCond %{PATH_INFO} ^.+$
RewriteRule (servlet1|servlet2)\b - [F]

Desglose da Regra Aprimorada:

  • Primeira Condição: Verifica se as solicitações não estão vindo de URLs especificadas do site.
  • Segunda Condição: Bloqueia solicitações com strings de consulta não vazias.
  • Terceira Condição: Bloqueia solicitações POST diretamente.
  • Quarta Condição: Bloqueia solicitações com PATH_INFO.

A combinação dessas condições garante que apenas solicitações válidas que navegam pelo ambiente do seu site possam acessar as páginas servlet especificadas.

Conclusão

Embora confiar no HTTP_REFERER não possa fornecer segurança à prova de balas, é uma medida inicial eficaz para restringir o acesso a páginas sensíveis. Este método é particularmente útil quando as restrições a nível de aplicação não permitem alterações abrangentes.

Como lembrete, essa abordagem adiciona uma camada de segurança, mas não é uma solução completa. Sempre considere reforçar a validação do lado do servidor e explorar medidas de segurança adicionais à medida que sua aplicação e sua base de usuários crescem.

Se você tentou esses métodos ou tem insights adicionais, deixe um comentário—suas experiências podem ajudar outros a enfrentar desafios semelhantes!