O arquivo .htaccess
é uma poderosa ferramenta de configuração de segurança disponível em servidores Apache. Por meio dele, é possível aplicar regras que controlam o acesso, redirecionamentos, restrições por IP, proteção de arquivos sensíveis e muito mais — tudo isso sem precisar alterar a configuração global do servidor.
Neste artigo, abordamos as principais práticas de segurança com .htaccess
, apresentando exemplos reais e explicando tecnicamente o propósito de cada linha usada.
1. Restringir o Acesso ao Arquivo .htaccess
É essencial proteger o próprio .htaccess
contra acesso externo, pois ele contém regras de segurança críticas.
<Files .htaccess>
Order Allow,Deny
Deny from all
</Files>
Explicação:
<Files .htaccess>
: Aplica a regra ao arquivo.htaccess
.Order Allow,Deny
: Define a ordem da permissão — primeiro permitir, depois negar.Deny from all
: Nega o acesso a todos os usuários.
Essa regra evita que usuários acessem diretamente o .htaccess
via navegador (dominio.com/.htaccess
), expondo informações sensíveis.
2. Impedir Navegação em Diretórios (Directory Listing)
Evita que usuários vejam a listagem de arquivos de um diretório sem index.
Options -Indexes
Explicação:
Options -Indexes
: Desativa o recurso de listagem automática de diretórios quando não há umindex.html
ouindex.php
.
Sem essa linha, um diretório acessado diretamente pode exibir todos os arquivos dentro dele — o que é uma grave vulnerabilidade.
3. Restringir o Acesso por IP
Permite acesso apenas a IPs autorizados — ideal para áreas administrativas.
<Limit GET POST>
Order Deny,Allow
Deny from all
Allow from 192.168.0.10
</Limit>
Explicação:
<Limit GET POST>
: Aplica a regra apenas às requisições GET e POST.Order Deny,Allow
: Primeiro nega, depois permite exceções.Deny from all
: Bloqueia todos os acessos.Allow from 192.168.0.10
: Permite acesso somente a esse IP.
Você pode adicionar mais IPs separados por espaço ou repetir a linha Allow from
.
4. Proteção de Arquivos Sensíveis (.env, config.php, etc)
Evita o acesso a arquivos de configuração críticos.
<FilesMatch "\.(env|ini|log|conf|json|sql|bak|config\.php)$">
Order Allow,Deny
Deny from all
</FilesMatch>
Explicação:
<FilesMatch>
: Aplica a regra com base em expressões regulares de nome de arquivo.Deny from all
: Nega o acesso a esses arquivos, evitando exposição de senhas, tokens e dados do banco de dados.
5. Evitar Hotlinking de Imagens
Impede que sites terceiros usem suas imagens diretamente, consumindo banda.
RewriteEngine on
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^https://(www\.)?seudominio\.com [NC]
RewriteRule \.(jpg|jpeg|png|gif)$ - [F,NC]
Explicação:
RewriteEngine on
: Ativa o motor de reescrita.RewriteCond %{HTTP_REFERER} !^$
: Permite quando o referer está em branco (alguns navegadores ou bots).RewriteCond %{HTTP_REFERER} !^https://(www\.)?seudominio\.com [NC]
: Permite apenas se o referer for do seu próprio domínio.RewriteRule \.(jpg|jpeg|png|gif)$ - [F,NC]
: Para todos os outros, retorna código 403 (Forbidden).
6. Forçar HTTPS
Melhora a segurança de tráfego com criptografia SSL.
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
Explicação:
RewriteCond %{HTTPS} off
: Aplica a regra apenas se HTTPS não estiver ativo.RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI}
: Redireciona para a versão HTTPS da URL solicitada.[L,R=301]
: “L” indica que é a última regra; “R=301” envia um redirecionamento permanente.
7. Bloquear Scanners e Bots Maliciosos
Reduz o risco de ataques automatizados.
SetEnvIfNoCase User-Agent “HTTrack|wget|curl|masscan|nmap” bad_bot
Deny from env=bad_bot
Explicação:
SetEnvIfNoCase User-Agent
: Verifica o user-agent da requisição ignorando maiúsculas/minúsculas."HTTrack|wget|curl..."
: Lista de user-agents comumente usados em scans maliciosos.Deny from env=bad_bot
: Bloqueia requisições com esses agentes.
8. Limitar o Tamanho de Uploads
Previne abusos no upload de arquivos.
LimitRequestBody 10485760
Explicação:
LimitRequestBody
: Define o tamanho máximo (em bytes) permitido para o corpo da requisição.10485760
: Equivale a 10 MB — você pode ajustar conforme necessário.
9. Proteção contra Injeção de Código via URL
Bloqueia requisições suspeitas que tentam explorar falhas via parâmetros.
RewriteCond %{QUERY_STRING} (../|..\|etc/passwd|input_file|mosConfig_|_REQUEST|%0A|%0D|%27|%3C|%3E|%00) [NC]
RewriteRule ^.*$ – [F,L]
Explicação:
RewriteCond %{QUERY_STRING}
: Aplica a regra quando a URL conter padrões maliciosos comuns.RewriteRule ^.*$ - [F,L]
: Bloqueia a requisição imediatamente.
Conclusão
O .htaccess
é uma ferramenta fundamental na proteção de aplicações PHP ou baseadas em CMS como WordPress, Joomla ou Laravel. Apesar da sua simplicidade, ele permite implementar políticas de segurança robustas sem necessidade de modificar o servidor principal.
Entretanto, deve-se usar o .htaccess
com cautela: erros na sua configuração podem derrubar o site. Sempre valide mudanças em ambiente de testes e faça backup antes de alterações.
Ao adotar as práticas aqui descritas, você reforça a camada de proteção da sua aplicação web, dificultando a ação de invasores e bots maliciosos.