Os 13 passos para a segurança do WordPress

Os 13 passos para a segurança do WordPress

Primeiro precisamos deixar claro que não é correto estipular um número de passos. Isso é uma variável de acordo com o tipo do projeto e sua capacidade de implementação.

Mas as 13 ações de segurança abaixo precisam ser seguidas, é o mínimo necessário. São elas:

  1. Realizar backups regulares dos dados;
  2. Manter o WordPress, plugins e temas sempre atualizados;
  3. Implementar a autenticação de dois fatores;
  4. Proteger o banco de dados da instalação;
  5. Certificar que o debug está protegido;
  6. Blindar o arquivo wp-config.php;
  7. Definir as permissões corretas para arquivos e pastas;
  8. Definir regras no servidor em uso;
  9. Excluir arquivos desnecessários do core;
  10. Evitar SPAM e tentativas de postagens externas;
  11. Não permitir a listagem dos nomes de usuários;
  12. Se proteger de ataques de XSS;
  13. Manter boas práticas de segurança.

Realizar backups regulares dos dados

Backups sempre serão seu porto seguro. Infelizmente sua validade somente é creditada quando se perde tudo.

Você precisa ter um processo de backup muito bem definido e considerar a cópia do banco de dados, arquivos do core, plugins e temas e das imagens contidas na pasta de uploads.

O mecanismo de revisões de posts do WordPress acaba sendo um backup, também, das postagens realizadas. Uma vez que a cada nova alteração uma cópia é salva e possibilita a “volta ao passado”.

Quem teve problemas de ataques com a versão 4.7 em que o conteúdo dos posts foram alterados através da API, basta utilizar esse recurso para voltar a versão original.

Os backups para uma melhor segurança do WordPress podem ser realizados por sua equipe de infra, hospedagem WordPress e por você mesmo através de plugin. Mas considere todos os cenários, é sempre válido e importante a redundância de cópias.

Manter o WordPress, plugins e temas sempre atualizados

Essa é básica, necessária e deve ser recorrente. Quando novas versões do WordPress e seus complementos são disponibilizados além de implementarem, ou aprimorarem, novas funcionalidades também corrigem aspectos de segurança.

As minors versions do WP podem ser atualizadas automaticamente. Algumas empresas de hospedagem também oferecem esse serviço. E você pode criar sua própria solução através do WP-CLI, por exemplo.

Para soluções em que as atualizações acontecem através de um processo de continuos delivery é mais fácil validar o impacto das atualizações em outros ambientes antes de aplica-las em produção.

Para quem atualiza através da Dashboard da plataforma considere o backup como ponto de apoio, se necessário. Mas sempre considere manter o WordPress, os plugins e temas em uso atualizados.

Implementar a autenticação de dois fatores

Através de um ataque de força bruta é possível identificar uma combinação de nome de usuário de senha.

Minimamente você deve fazer uso de senhas fortes, mas considerar a implementação da autenticação de dois fatores é importante por adicionar uma camada adicional de segurança.

Infelizmente, usuários utilizam senhas fracas e recorrentes em listas de senhas utilizadas por invasores. E como gerir e forçar o uso de senhas fortes não é simples, considere o método de confirmar a identidade mediante o login.

Há bons plugins WordPress que adicionam o recurso em instalações regulares ou multisites.

Escrevi sobre o assunto e fiz uma revisão sobre os plugins disponíveis que implementam o recurso no artigo como implementar a autenticação de dois fatores no WordPress.

Proteger o banco de dados da instalação

A segurança do WordPress precisa ser direcionada também ao banco de dados da instalação.

Todo o seu conteúdo, comentários, configurações e muitas horas de trabalho e dedicação estão guardas lá, o que significa dizer que você sabe da importância e valor desses dados.

Prefira um prefixo para as tabelas não convencional como o “wp_”. Ao utiliza-lo fica fácil deduzir o esquema do seu banco de dados. Prefira algo como “wp_HAshE_MalluCCo_”.

Se o prefixo “wp_” está em uso considere a troca e para isso considere aprender como alterar o prefixo da tabela de banco de dados do WP.

A combinação de usuário e senha precisam, e deve, ser fortes. E a política de acesso ao banco de dados mais ainda. Aplicativos como o phpMyAdmin quando facilmente disponíveis permitem a cópia dos dados ou realizar estragos, e se não tiver backups, irreparáveis.

Certificar que o debug está protegido

Arquivo de debug registra informações sensíveis da sua aplicação como o path. E para invasores você deve ocultar o máximo possível de informações sobre seu sistema.

O WordPress possui um mecanismo próprio para depuração que permite controlar seu ligamento, exibição dos dados e gravação em arquivo.

Se por algum motivo for necessário o uso do debug em ambiente de produção, considere não exibir na tela os erros e se certificar que o arquivo debug.log tenha uma permissão segura para evitar que ele seja acessado no navegador de internet.

Em algumas configurações de servidor se faz necessário a ajuda da função ini_set do PHP. As constantes que controlam o debug devem ser colocadas no arquivo wp-config.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' )

É importante conhecer, em detalhes, a função de cada uma das constantes para o debug do WordPress e aproveitar o seu uso em cada ambiente e necessidade do seu projeto.

Blindar o arquivo wp-config.php

O arquivo wp-config.php é o mais importante. Sem ele nada funciona e informações sensíveis estão dispostas.

Proteger o referido arquivo é essencial para a segurança do WordPress. Considere uma localização segura, permissão correta e o bloqueio do seu acesso direto.

Esse arquivo pode armazenar constantes que ajudam aprimorar a segurança e te deixar mais protegido.

Em resumo é preciso considerar:

  • Manter o arquivo um nível acima do diretório público;
  • Usar a permissão 400 (readonly) ou 600 (para permissão de escrita);
  • No arquivo .htaccess fazer uso de diretiva para proteção de acesso direto ao arquivo.

Definir as permissões corretas para arquivos e pastas

As pastas e os arquivos armazenados nos servidores podem colocar toda a segurança em risco se não tiverem as permissões corretas.

Permissões erradas também podem comprometer o funcionamento do sistema. E isso pode variar de finalidade que se deseja para o arquivo, ou pasta, e o servidor em questão.

Para uma melhor segurança do WordPress é preciso considerar as permissões corretas para os arquivos gerais, o wp-config.php, o debug.log e as pastas com as devidas permissões que são:

  • Permissão 644 para os arquivos;
  • Permissão 755 para os diretórios;
  • Remover arquivos sem usuários;
  • Permissão 600 no wp-config.php;
  • Permissão 600 para o arquivo debug.log.

Definir regras no servidor em uso

Precisamos considerar importantes regras para segurança no WordPress no desenvolvimento, na hospedagem do site e no servidor web como um todo.

Nesse cenário temos uma escala de influência: o servidor web como um todo, a hospedagem do site e o desenvolvimento. Suas configurações podem causar impactos relevantes, ou não.

Como são vários agentes, e empresas, envolvidos não podemos considerar que todos vão seguir configurações e boas práticas de segurança. Por isso devemos exigir de todos os níveis para caso tenhamos falha, ou inexistência de configurações, o outro pode ser considerado.

Um exemplo clássico é a listagem dos arquivos nos diretórios que deve ser evitada.

Além de listar os arquivos sem necessidade, é exibido também informações sensíveis e vitais para ataques como o path, o servidor web em uso, sua versão e dependendo da configuração ainda mais informações.

Nesse cenário ilustrativo e considerando o servidor web Apache, por exemplo, o ideal seria que as pastas de plugins e temas tenham um arquivo index.php; que o arquivo .htaccess tenha a diretiva Options com o valor -Indexes e essa mesma regra seja replicada no httpd.conf.

Com isso, teremos failover em três níveis. Ou seja, na configuração geral do servidor web, através do arquivo httpd.conf que se aplica sobre as outras duas; no arquivo .htaccess que se aplicará sobre todas as pastas; e o arquivo index.php que será útil se os dois últimos não tiverem a configuração.

Excluir arquivos desnecessários do core

Tem arquivos que servem somente para cumprir tabela, ou para serem templates ou até mesmo com o uso limitado.

Esses arquivos, como no caso do WordPress, expõe a versão do software em uso. E se você não tem um política regular de atualização é melhor exclui-los.

Embora seja possível adotar técnicas como a fingerprints para detectar a versão do WP o quanto mais você conseguir evitar e dificultar melhor.

Os arquivos do core do WordPress que precisam ser removidos para uma melhor segurança são:

  • /wp-config-sample.php
  • /readme.html
  • /license.txt
  • /wp-admin/install.php

Evitar SPAM e tentativas de postagens externas

Infelizmente precisamos conviver com essa praga. Mas podemos escolher como: sendo bombardeados ou o desconsiderando em sua quase totalidade.

As técnicas SPAM evoluem constantemente e o quanto conseguirmos estarmos protegidos se faz necessário, uma vez que ações como essas estragam a experiência do usuário final, dos administradores do site e sua reputação.

Técnicas mais avançadas não tem focado em inserir suas mensagens nos formulários de comentários ou contato. E sim em invadir sua aplicação, injetar códigos e exibir somente para o bot do Google, por exemplo.

Quando isso acontece, sua indexação no Google será comprometida e ao contrário dos seus resultados, os de terceiros serão exibidos. E para resolver será preciso eliminar os códigos maliciosos injetados e solicitar uma reconsideração do Google através do Search Console.

Com o código abaixo você diminui essas práticas além de evitar também ataques do tipo CSRF. É claro que o uso de WAF garantirá uma proteção maior contra essas práticas.

# Avoid SPAM and CSRF
<IfModule mod_rewrite.c>
 RewriteEngine On
 RewriteCond %{REQUEST_METHOD} POST
 RewriteCond %{REQUEST_URI} .(wp-comments-post|wp-login)\.php*
 RewriteCond %{HTTP_REFERER} !.*exemplo-dominio.* [OR]
 RewriteCond %{HTTP_USER_AGENT} ^$
 RewriteRule (.*) http://%{REMOTE_ADDR}/$ [R=301,L]
</ifModule>

Não permitir a listagem dos nomes de usuários

Para realizar ataques de força bruta, os atacantes precisam de três ingredientes: uma lista de sites alvo, nomes de usuários de cada site e um dicionário de senha.

Dicionários de senha são encontrados facilmente na internet, e infelizmente todos os anos presenciamos as senhas mais fáceis que deveriam ser evitadas estando em uso, e provavelmente em sua instalação WP.

Conhecendo bem o mecanismo do WordPress é possível aplicar técnicas para obter e listar os nomes de usuários em uso, essa prática você deve evitar. Assim é um ingrediente a menos, e vital, para usarem contra você.

O código abaixo se faz necessário para evitar a técnica de listar e enumerar os nomes de usuários do seu WordPress.

# Avoid enumerating users
RewriteCond %{REQUEST_URI} ^/$
RewriteCond %{QUERY_STRING} ^/?author=([0-9]*)
RewriteRule ^(.*)$ http://exemplo-dominio.com/? [L,R=301]

Se proteger de ataques de XSS

Ataques do tipo XSS é muito, muito comum. E a razão são simples: é fácil de encontrar alvos com essa brecha.

E a facilidade existe por que alguns desenvolvedores ignoram duas regras básicas de segurança no desenvolvimento: não confiar nos dados inputados pelos usuários e “printar” os dados na tela sem escapamento.

O WordPress tem inúmeras funções para escapamento para os mais variados tipos de dados, conheça todas elas e considere imediatamente o uso.

Considere se inteirar também sobre o XSS aprendendo como os ataques são realizados, as consequências e principalmente como se proteger.

Manter boas práticas de segurança

Segurança é processo. Você precisa definir o seu e seguir.

As dicas de segurança para WordPress aqui apresentadas podem ser incrementadas com dezenas de outras, mas é o mínimo necessário que você pode e deve fazer.

Mas lembre-se ela não deve ser feito uma única fez. Mas sim, revisadas constantemente e melhoradas, por isso se faz necessário a definição de um processo.

Além de expertise humana o uso de ferramentas automatizadas para escaneamento é muito útil e lhe ajudará nessa tarefa.

Guia prático de segurança para WordPress

Deixe um comentário