Introdução
Erros no PHP podem revelar informações sensíveis, como estrutura de diretórios, nomes de tabelas e detalhes da aplicação. Em ambientes de produção, exibir erros para os usuários pode ser um risco de segurança grave.
1. Desativando a exibição de erros no php.ini
No ambiente de produção, devemos desativar a exibição de erros diretamente no php.ini
:
display_errors = Off
log_errors = On
error_log = /var/log/php_errors.log
Explicação das diretivas:
display_errors = Off
: Impede que erros sejam exibidos no navegador.log_errors = On
: Habilita o registro de erros no arquivo de log.error_log = /var/log/php_errors.log
: Define o caminho do log de erros.
2. Configurando erros no código PHP
Podemos configurar a exibição de erros diretamente no código para ambientes de desenvolvimento e produção:
if ($_SERVER['APP_ENV'] === 'production') {
ini_set('display_errors', 0);
ini_set('log_errors', 1);
ini_set('error_log', '/var/log/php_errors.log');
} else {
ini_set('display_errors', 1);
error_reporting(E_ALL);
}
Isso permite que os erros sejam exibidos em desenvolvimento e ocultados em produção.
3. Redirecionando erros para um log seguro
Evite armazenar logs no diretório público do site. Em vez disso, utilize um caminho seguro:
error_log('/var/www/logs/erros.log');
Isso evita que usuários acessem informações críticas através da URL.
4. Criando uma página de erro personalizada
Podemos exibir uma página genérica para o usuário quando ocorrer um erro, sem revelar detalhes da falha:
set_error_handler(function($errno, $errstr, $errfile, $errline) {
error_log("Erro: [$errno] $errstr - $errfile:$errline");
header('Location: /erro.html');
exit();
});
Conclusão
Ocultar mensagens de erro no ambiente de produção é uma medida essencial para garantir a segurança da aplicação. Configurar corretamente o php.ini
, registrar logs de forma segura e exibir páginas de erro personalizadas são boas práticas para evitar a exposição de informações sensíveis.
Por que ocultar erros no PHP é essencial para segurança?
A exibição de erros no PHP pode ser útil no ambiente de desenvolvimento, mas em produção pode expor informações críticas que facilitam ataques hackers. Muitos sites são comprometidos porque mensagens de erro revelam detalhes da aplicação, como versões de software e consultas SQL.
Para mitigar esses riscos, é fundamental desativar display_errors
e armazenar logs em locais seguros. Além disso, páginas de erro personalizadas ajudam a manter uma boa experiência do usuário, mesmo quando falhas ocorrem.
Outro ponto importante é diferenciar configurações entre desenvolvimento e produção. Utilizar variáveis de ambiente para definir níveis de erro evita configurações incorretas e melhora a manutenção do código.
Algumas aplicações:
- Impedir que informações sensíveis sejam expostas a invasores.
- Manter um log detalhado de erros para análise sem comprometer a segurança.
- Garantir que usuários não vejam mensagens técnicas ao encontrar um erro.
- Melhorar a segurança da aplicação ao evitar vazamento de dados sensíveis.
Dicas para quem está começando
- Defina
display_errors = Off
nophp.ini
em produção. - Habilite
log_errors
para registrar falhas sem exibi-las ao usuário. - Use
set_error_handler()
para personalizar o tratamento de erros. - Nunca armazene logs de erro em diretórios acessíveis pelo navegador.
- Crie páginas de erro personalizadas para manter a experiência do usuário.
Contribuições de Gustavo Ferraz