Back-End

21 dez, 2015

A trilogia para um debug seguro e eficaz no WordPress

Publicidade

Este artigo foi publicado em 22/06/2015. Por ter sido considerado um dos melhores artigos de 2015, foi republicado hoje.

Iniciativa WordPress Seguro

Criamos uma iniciativa chamada #WordPressSeguro para divulgar e colaborar com o que diz respeito à segurança para WP. Além de informações, disponibilizamos um Guia Prático de Implementações para Segurança em WordPress.

Sobre debug no WordPress

Depurar código precisa ser parte do processo de desenvolvimento. Isso amplifica a qualidade final do produto e eleva a interoperabilidade com o ecossistema do WordPress, ou seja, o core, os plugins em questão e o tema em uso.

É sabido que cada instalação do WP é recheada com plugins para agregar funcionalidades diversas e um tema para interação pública. Isso traz uma variedade de códigos, padrões e desafios.

Portanto, considere o desenvolvimento dos seus projetos com o debug ativo e revisado para evitar os erros ocultos, os avisos e alertas e as advertências de códigos. Na correria, ou na falta de planejamento do desenvolvimento, o debug é deixado de lado, qualidade e segurança passam batidos, e lamentavelmente chega à produção um código ruim, inseguro e falho.

Debug de forma segura, as três constantes e duas funções

De forma nativa, temos um sistema de debug que, por padrão, vem desativado. Além da possibilidade da ativação, temos capacidades ocultas para um poderio e segurança maior do mecanismo.

A constante WP_DEBUG

O debug do WordPress é ativado através da constante WP_DEBUG arquivo wp-config.php.

define( 'WP_DEBUG', false ); // Por padrão vem desativado
define( 'WP_DEBUG', true ); // Considere o valor true para ativar

As outras possibilidades de configuração são as seguintes:

define( 'WP_DEBUG_LOG', true );
define( 'WP_DEBUG_DISPLAY', false );

A constante WP_DEBUG_LOG

Através da constante WP_DEBUG_LOG com o valor true, teremos todos os avisos e alertas, erros e as advertências de códigos salvos em um arquivo chamado debug.log, que é localizado em /wp-content/debug.log.

Esse arquivo deve ser revisado com periodicidade e as as inconsistências de todos os códigos da aplicação devem ser analisadas e, em seguida, tudo deve ser levado ao conhecimento da equipe para a solução. Além disso, esse procedimento é um grande aliado para análises de situações fora da tela em que o processamento acontece em requisições AJAX e no recurso de Cron do WordPress, por exemplo.

A contante WP_DEBUG_DISPLAY

O valor true e/ou false pode e deve ser considerado para a constante WP_DEBUG_DISPLAY. Seu valor padrão é true, o que faz com que os erros sejam exibidos na tela – esse mesmo valor deve ser considerado em ambientes de desenvolvimento.

Em ambientes de produção, a referida constante deve estar com o valor false, evitando assim a exibição dos erros na tela onde detalhes da aplicação são expostos.

Eu aconselho o uso do valor false para todos os ambientes, mas em conjunto com o valor true para a constante WP_DEBUG_LOG. Dessa forma, não teremos os erros printados na tela, evitando exposição do ambiente e, em alguns casos, comprometendo a execução da interface, além de forçar a equipe a revisar o arquivo debug.log para análises e correções das inconsistências.

Os valores das constantes alinhados às configurações do PHP

define( 'WP_DEBUG', true );
define( 'WP_DEBUG_LOG', true );
@ini_set( 'log_errors', 'On' );
define( 'WP_DEBUG_DISPLAY', false );
@ini_set( 'display_errors', 'Off' );

Com essa combinação de constantes e valores, garantimos um cenário ideal para um debug seguro e eficaz no WordPress, registrando e armazenando as inconsistências, mas evitando sua exposição.

Atente-se para o uso da função ini_set do PHP, utilizada para definir o valor de uma configuração. É importante seu uso, além da constante do WP, para nos certificarmos de que o comportamento desejado para a aplicação está alinhado com o comportamento do PHP configurado no servidor.

Por exemplo, imagine que o PHP foi configurado para exibir erros, tendo a diretiva display_errors no arquivo php.ini com o valor On e a constante WP_DEBUG_DISPLAY está com o valor false para não exibir erros. O comportamento configurado no PHP vai sobrepor o do WP, por isso alinhe ambos e evite surpresas.

Além dos erros ocultos, os avisos e alertas e as advertências de códigos

O WordPress modifica, melhora, adiciona e remove novas funções e seus argumentos a cada versão lançada. Mas há uma política clara de manutenção de códigos legados, tratando segurança e consistência para o uso de novas versões e manutenção de códigos antigos. Portanto, considere manter o WordPress e seus componentes sempre atualizados.

As funções e seus argumentos que ficaram em desuso no WP são tratados de forma especial. Primeiro, não há quebra e inconsistência. Durante alguns ciclos de lançamentos é mantida uma compatibilidade com o sistema legado. Segundo, avisos são emitidos quando se faz uso de código em desuso, informando que eles foram modificados na versão x e o correto a ser utilizado a partir de agora é uma outra função/argumento e que em um futuro não muito distante a forma de uso deixará de ser suportada.

Esses avisos são registrados no debug.log, permitindo assim a consulta pelo desenvolvedor sobre a nova forma de prosseguir adiante. Ou seja, o WordPress, além de manter a compatibilidade, detalha o código ultrapassado a ser corrigido.

Localização e proteção do arquivo debug.log

Como informado, o arquivo debug.log fica localizado no diretório /wp-content. Esse arquivo em hipótese alguma deve ser público e, para isso, precisamos protegê-lo.

A correta permissão para o arquivo

Considere a permissão 600 para o arquivo debug.log que permitirá a leitura e gravação do core do WordPress e seus plugins ao arquivo.

Uma contribuição do .htaccess

Além da correta permissão, para quem usa Apache, considere uma proteção extra ao arquivo através de diretivas no .htaccess, e bloqueie o arquivo de acessos externos por meio do navegador de Internet – por exemplo, quando alguém tentar acessar dominio-do-site.com/wp-content/debug.log.

<Files debug.log>
Order allow,deny
Deny from all
</Files>

Considere o uso do mecanismo de debug padrão do WordPress, mas faça uso de forma segura através das constantes e funções corretas para isso. Garanta segurança e maior qualidade dos códigos desenvolvidos e atualizados da plataforma.