Introdução
Os ataques de inclusão de arquivos (Local File Inclusion - LFI e Remote File Inclusion - RFI) permitem que um invasor carregue arquivos maliciosos no servidor e execute código arbitrário. Essa vulnerabilidade ocorre quando entradas do usuário são usadas diretamente em funções como include()
, require()
e file_get_contents()
sem validação.
1. Entendendo LFI e RFI
- LFI (Local File Inclusion): Permite a inclusão de arquivos locais do servidor.
- RFI (Remote File Inclusion): Permite a inclusão de arquivos externos de servidores remotos.
Exemplo de código vulnerável:
$pagina = $_GET['pagina'];
include($pagina);
Se o atacante passar pagina=../../etc/passwd
, ele pode acessar arquivos sensíveis do sistema.
2. Como evitar LFI e RFI no PHP
2.1. Não usar entradas do usuário diretamente
Nunca utilize variáveis do usuário para incluir arquivos sem validação.
2.2. Criar uma lista branca de arquivos permitidos
Uma abordagem segura é definir uma lista de arquivos válidos:
$paginas_permitidas = ['home.php', 'contato.php', 'sobre.php'];
$pagina = $_GET['pagina'] ?? 'home.php';
if (!in_array($pagina, $paginas_permitidas)) {
die('Acesso negado!');
}
include($pagina);
Isso impede que usuários acessem arquivos não autorizados.
2.3. Normalizar caminhos e evitar subidas de diretório
Podemos restringir o caminho do arquivo usando realpath()
:
$base = realpath(__DIR__ . '/paginas/');
$arquivo = realpath($base . '/' . basename($_GET['pagina']));
if (strpos($arquivo, $base) !== 0 || !file_exists($arquivo)) {
die('Arquivo inválido!');
}
include($arquivo);
Isso impede que o usuário acesse arquivos fora do diretório paginas/
.
2.4. Desativar inclusão de arquivos remotos no php.ini
Para evitar RFI, desative a inclusão remota no PHP:
allow_url_include = Off
allow_url_fopen = Off
Isso impede que arquivos sejam carregados de servidores externos.
Conclusão
Os ataques de inclusão de arquivos são extremamente perigosos e podem comprometer um servidor inteiro. Validar entradas do usuário, usar listas brancas, normalizar caminhos e desativar inclusão remota são estratégias fundamentais para proteger aplicações PHP.
Por que evitar a inclusão insegura de arquivos no PHP é essencial?
A inclusão de arquivos no PHP pode ser uma ferramenta poderosa, mas se não for usada corretamente, pode abrir portas para ataques graves. Muitos desenvolvedores cometem o erro de confiar nas entradas do usuário ao incluir arquivos, permitindo que invasores acessem dados sensíveis ou executem código malicioso.
Os ataques LFI e RFI podem ser prevenidos com boas práticas, como definir uma lista de arquivos permitidos, restringir o acesso a diretórios específicos e desativar a inclusão remota no php.ini
. Essas medidas garantem que apenas arquivos autorizados sejam carregados, reduzindo significativamente os riscos de segurança.
A segurança em aplicações PHP deve ser uma prioridade. Pequenos descuidos podem levar a falhas críticas, comprometendo dados e a integridade do sistema. Implementar verificações rigorosas e evitar entradas dinâmicas em funções sensíveis é essencial para manter a aplicação protegida.
Algumas aplicações:
- Impedir o carregamento de arquivos não autorizados na aplicação.
- Proteger contra execução remota de código malicioso.
- Evitar que usuários acessem arquivos sensíveis do servidor.
- Reduzir vulnerabilidades que podem ser exploradas por atacantes.
Dicas para quem está começando
- Nunca utilize entradas do usuário diretamente em
include()
ourequire()
. - Crie uma lista de arquivos permitidos e valide a entrada antes de incluir arquivos.
- Use
realpath()
ebasename()
para evitar subidas de diretório. - Desative
allow_url_include
nophp.ini
para impedir inclusão remota. - Restrinja permissões de arquivos e diretórios para evitar acessos não autorizados.

Gustavo Ferraz
Desenvolvedor backend com experiência em PHP, Java e integração de APIs em Node.js e Python.
Mais sobre o autor