Skip to content

Tudo para WordPress, desenvolvimento web — e não só

Auditoria ao .htaccess: erro 500, diretivas mortas, invasão

Auditoria ao .htaccess: porque é que o site devolve 500 e que regras não funcionam

Arraste o ficheiro — a ferramenta encontra o BOM, as diretivas mortas, as regras com alto risco de erro 500 e os sinais de intervenção alheia. O ficheiro é lido no seu navegador e não é enviado para lado nenhum.

As verificações ao nível dos bytes — BOM, CRLF, caracteres não imprimíveis e invisíveis — só são possíveis para um ficheiro. Ao colar da área de transferência, o navegador já os removeu, pelo que a causa mais frequente de um erro 500 se torna invisível.
A análise começa automaticamente. O ficheiro não é enviado para lado nenhum — é lido pelo seu navegador.
Contexto

Um .htaccess limpo não cura uma invasão. Se o site estiver comprometido, o código malicioso vive no PHP e o .htaccess é apenas a consequência: o dropper reescreve o ficheiro poucos minutos depois de o limpar. A ordem é a inversa — primeiro encontrar o código executável, depois arrumar a configuração.

O ficheiro é lido no seu navegador — o seu conteúdo não é enviado para lado nenhum nem guardado.

Porquê um ficheiro e não texto colado

A causa mais frequente de um erro 500 depois de editar o .htaccess nem sequer se vê no texto. É o BOM — três bytes invisíveis no início do ficheiro, acrescentados pelo Bloco de notas do Windows ao gravar em UTF-8. O Apache considera-os parte da primeira diretiva e não consegue analisá-la. É por isso que a ferramenta recebe o próprio ficheiro: só assim é possível ler os bytes e ver o BOM, as mudanças de linha ao estilo Windows e os caracteres invisíveis dentro das linhas. O segundo grupo de problemas são as diretivas que não fazem nada, mas parecem funcionais. mod_gzip_on é sintaxe do Apache 1.3; nos servidores atuais é ignorada em silêncio, enquanto se acredita durante anos que a compressão está ligada. Um bloco ExpiresByType envolvido numa verificação de mod_headers.c em vez de mod_expires.c também não funciona — e sem um aviso ninguém repara. Em terceiro lugar, php_value e php_flag. Só funcionam quando o PHP está carregado como módulo do Apache. Em alojamentos modernos com PHP-FPM, essa linha ou é ignorada ou devolve logo um 500. E, à parte, sobre segurança: se o ficheiro tiver regras que redirecionam os visitantes conforme o motor de busca de onde vieram, ou que escondem o redirecionamento do administrador, isso é um sinal típico de compromisso. Mas um .htaccess limpo não cura a invasão: quase sempre há algures nos ficheiros um script PHP que o volta a escrever.

Perguntas frequentes