Configurar o vigia de ficheiros
Primeiro levantamento: criar o estado de referência
No primeiro arranque não há nada para comparar — em vez disso, a execução cria o estado de referência: para cada ficheiro uma soma de verificação (sha256, onde o PHP a traz consigo, senão md5), além do tamanho, da hora de alteração e da área. Isto corre em pequenos blocos, por predefinição até 400 ficheiros ou 5 segundos por passo; podes fechar a janela e continuar mais tarde. No primeiro levantamento não há valor percentual, porque ainda ninguém conhece o número total — são mostrados os ficheiros lidos e os diretórios por abrir. Nota antes de mais: o vigilante memoriza o que encontra e considera-o correto. Se não tiveres a certeza quanto à instalação, deixa correr primeiro a integridade dos ficheiros (núcleo contra WordPress.org) e a varredura de malware. Depois de uma mudança de servidor ou de um restauro, «Descartar o estado de referência» é o caminho limpo: todas as somas de verificação e constatações desaparecem, e a execução seguinte volta a fazer o levantamento. Isto é irreversível.
O que é verificado — e o que não é
É verificada a árvore a partir do diretório do WordPress. Se, no teu alojamento, wp-content ou o diretório de plugins estiver fora dela, entra como raiz própria e recebe um prefixo próprio na apresentação. Uma wp-config.php que esteja um nível acima da instalação é incluída como ficheiro individual identificado e verificada em primeiro lugar no início de cada execução — o diretório-pai em si não é propositadamente percorrido, porque na maioria dos alojamentos estão lá instalações alheias e backups. Por predefinição ficam de fora o diretório de uploads e 15 padrões integrados de cache, temporários e registos (entre outros wp-content/cache, wp-content/upgrade, node_modules, .git, *.log); podes desligar ambos os interruptores, mas então a execução demora mais e cada carregamento de imagem gera uma constatação. Padrões próprios acrescenta-los na lista de exclusões: até 100 entradas, cada uma com um máximo de 200 caracteres. Um padrão sem barra corresponde a qualquer secção do caminho com esse nome, um padrão com barra está ancorado na raiz, * vale dentro de uma secção. Um padrão que corresponda a todos os caminhos de exemplo é recusado — desligaria a vigilância sem que se notasse ao olhar para a lista. Ao inscrever, é contado e mostrado quantos ficheiros do estado atual ficam abrangidos. Não são lidos os ficheiros acima do limite de tamanho (por predefinição 16 MB, regulável de 1 a 512), os ficheiros ilegíveis e tudo o que esteja atrás de uma ligação simbólica — estes casos aparecem como números próprios no resultado e não contam expressamente como «em falta».
Ler as constatações e aplicá-las
Há três tipos: alterado, novo, em falta. Por ficheiro há no máximo uma constatação em aberto na lista, com a primeira deteção, a última deteção e um contador. A comparação é feita com o estado de referência confirmado mais recentemente, não com a última execução — por isso uma constatação permanece até a aplicares. Se o conteúdo voltar a coincidir por si próprio com a referência (atualização revertida, ficheiro reposto), a constatação desaparece; um ficheiro novo já comunicado que volta a desaparecer é escrito com o caminho no Registo de atividades, em vez de ser apagado em silêncio. «Aplicar o estado de referência» mostra antes o que aconteceria e trabalha depois em blocos de 500: os ficheiros alterados recebem a sua nova soma de verificação, os novos são acrescentados, os que faltam são retirados. Nos próprios ficheiros nada muda — mas a soma de verificação antiga desaparece depois disso, portanto vê tudo aquilo que não consigas explicar antes de carregares no botão. Para o ficheiro há uma exportação CSV com até 2000 constatações em aberto, incluindo a soma de verificação antiga e a nova. Deves conhecer dois limites: acima de 3000 constatações em aberto continua a contar-se, mas já não se guarda nada (a interface di-lo), e do histórico ficam as 500 constatações aplicadas mais recentes. Uma execução interrompida não determina ficheiros em falta — para isso é preciso um percurso completo.
Aviso imediato em ficheiros sensíveis
Ligado por predefinição. «Sensível» não significa aqui «importante», mas sim: quem consegue alterar este ficheiro executa código próprio ou chega aos dados de acesso. São eles a wp-config.php, as configurações do servidor (.htaccess, .htpasswd, .user.ini, php.ini, web.config), os drop-ins (db.php, object-cache.php, advanced-cache.php, sunrise.php e afins), os mu-plugins, bem como ficheiros PHP em sítios onde não deveria estar nenhum: no diretório de uploads, na raiz do WordPress e em wp-content fora de plugins e themes. Estes avisos saem no fim de cada pequeno bloco, e não só no fim da execução — numa instalação grande passam horas entre um e outro. O intervalo mínimo está por predefinição em 15 minutos (regulável de 0 a 1440); o que surgir nesse período é reunido e segue com o aviso seguinte, nada se perde. Um aviso indica no máximo 200 entradas, o resto é referido como número. No fim da execução e em caso de interrupção, o resto é esvaziado sem olhar ao intervalo. Testa o caminho uma vez com o aviso de teste: ele diz-te expressamente se wp_mail() aceitou ou recusou a mensagem — se ela é entregue, decide-o o servidor que está por trás. Podes ainda inscrever padrões próprios como sensíveis; as constatações em aberto são logo reclassificadas, para que a lista não mostre duas verdades.
Automatismo e calendário
Por predefinição a execução só corre quando a inicias. Se ligares o automatismo, escolhes entre de hora a hora, duas vezes por dia, diariamente (predefinição) e semanalmente. O primeiro momento fica propositadamente 5 minutos no futuro, para que não arranque uma execução a meio do teu trabalho na administração. O cálculo é feito a partir do início da última execução, com 5 minutos de tolerância — caso contrário, uma execução longa correria cada vez com menos frequência. O cron processa os mesmos pequenos blocos e reagenda-se a cada 30 segundos enquanto houver algo por fazer; se estiveres tu próprio ao volante no navegador, espera 120 segundos e não mete a mão no volante. Dois condutores no mesmo trabalho são impedidos por um token que passa adiante com cada resposta; o bloqueio expira ao fim de 60 segundos, para que um navegador fechado de repente não bloqueie o trabalho para sempre. Se na tua instalação estiver definido DISABLE_WP_CRON, a mensagem ao ligar diz-te que a execução só arranca se o wp-cron.php for chamado a partir do exterior — ou seja, se estiver configurado um cronjob no servidor.