Configurando o PHP para ocultar erros em produção

Métodos para ocultar mensagens de erro no PHP, protegendo informações sensíveis e garantindo segurança em produção.

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.

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 no php.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

Compartilhe este tutorial: Como configurar o PHP para evitar a exposição de erros no ambiente de produção?

Compartilhe este tutorial

Continue aprendendo:

Como proteger um site PHP contra ataques de força bruta?

Métodos para evitar ataques de força bruta em sites PHP, protegendo credenciais e impedindo tentativas automáticas de login.

Tutorial anterior

Como restringir o acesso direto a arquivos PHP sensíveis?

Métodos para restringir o acesso direto a arquivos PHP sensíveis, garantindo a segurança da aplicação.

Próximo tutorial