Introdução
Em aplicações PHP, alguns diretórios contêm arquivos críticos, como credenciais do banco de dados, configurações e logs. Se esses diretórios não forem protegidos adequadamente, um invasor pode acessá-los e comprometer toda a aplicação.
1. Movendo arquivos sensíveis para fora do diretório público
A melhor prática é armazenar arquivos sensíveis fora do diretório público do servidor.
Estrutura recomendada:
/var/www/
├── public/ (diretório acessível pelo navegador)
├── config/ (arquivos protegidos)
├── logs/ (arquivos de log, acessíveis apenas pelo sistema)
No código PHP, referencie arquivos de configuração sem expô-los:
require_once __DIR__ . '/../config/database.php';
Isso impede que um usuário acesse arquivos críticos diretamente via navegador.
2. Restringindo acesso com .htaccess
Se mover os arquivos não for uma opção, podemos bloquear acessos diretamente pelo Apache utilizando .htaccess
:
<Files "config.php">
Order Allow,Deny
Deny from all
</Files>
Isso impede que arquivos como config.php
sejam acessados diretamente via URL.
Para restringir todo um diretório, podemos usar:
<Directory "/var/www/config">
Order Deny,Allow
Deny from all
</Directory>
Isso garante que nenhum arquivo dentro do diretório config/
seja acessível publicamente.
3. Definindo permissões de arquivos e diretórios
Ajuste as permissões para que apenas o servidor tenha acesso aos arquivos sensíveis:
chmod 600 /var/www/config/database.php
chmod 700 /var/www/config/
Isso impede que usuários não autorizados acessem ou modifiquem arquivos críticos.
4. Bloqueando listagem de diretórios
Para evitar que usuários visualizem o conteúdo de diretórios, desative a listagem de arquivos no Apache com .htaccess
:
Options -Indexes
Isso impede que diretórios sem um index.php
sejam listados no navegador.
5. Protegendo arquivos de log
Os logs da aplicação podem conter informações sensíveis. Para garantir sua segurança, armazene-os em um diretório protegido e defina permissões restritas:
chmod 600 /var/www/logs/error.log
Além disso, podemos evitar que logs sejam acessados via navegador com .htaccess
:
<Files "*.log">
Order Deny,Allow
Deny from all
</Files>
Conclusão
Restringir o acesso a diretórios sensíveis no PHP é essencial para proteger informações críticas da aplicação. Movendo arquivos para locais seguros, ajustando permissões, bloqueando listagens e utilizando .htaccess
, podemos reduzir significativamente os riscos de exposição e ataques.
Por que restringir o acesso a diretórios sensíveis no PHP é essencial?
Muitas falhas de segurança em aplicações PHP acontecem porque arquivos críticos, como config.php
, database.php
e logs/error.log
, estão acessíveis publicamente. Isso pode permitir que atacantes obtenham credenciais, configurem acessos indevidos e até alterem a aplicação.
A melhor prática para proteger esses arquivos é movê-los para fora do diretório público do servidor. Quando isso não for possível, podemos configurar .htaccess
para bloquear o acesso direto e ajustar as permissões para que apenas o servidor possa ler esses arquivos.
Outra medida importante é impedir a listagem de diretórios, garantindo que usuários não possam visualizar a estrutura de arquivos da aplicação. Pequenas configurações podem fazer uma grande diferença na segurança da aplicação, evitando vazamento de informações sensíveis e protegendo os dados do sistema.
Algumas aplicações:
- Impedir que arquivos de configuração fiquem acessíveis publicamente.
- Proteger logs de erros que podem conter informações sensíveis.
- Evitar que usuários não autorizados visualizem a estrutura de diretórios.
- Reduzir vulnerabilidades associadas ao acesso indevido de arquivos da aplicação.
Dicas para quem está começando
- Mova arquivos sensíveis para fora do diretório público do servidor.
- Use
.htaccess
para bloquear o acesso direto a arquivos críticos. - Desative a listagem de diretórios no Apache para evitar exposição de arquivos.
- Defina permissões corretas para arquivos e diretórios, restringindo acessos indevidos.
- Monitore logs de acessos para identificar tentativas suspeitas de exploração.
Contribuições de Gustavo Ferraz