Segurança do WordPress como um processo

Publicados: 2022-03-10
Resumo rápido ↬ No ano passado, o WordPress foi responsável por 83% dos sites de gerenciamento de conteúdo infectados. Certifique-se de que você não está contribuindo para essas infecções e aprenda a gerenciar o WordPress com segurança.

( Este artigo é gentilmente patrocinado pela Sucuri .) A segurança do WordPress não tem uma boa reputação. Mais de 70% de todos os sites WordPress carregam algum tipo de vulnerabilidade de acordo com pesquisas feitas em +40.000 sites WordPress por Alexa. Se você desenvolve temas ou plugins do WordPress – ou usa o WordPress para seus sites – esse número deve assustá-lo.

Há muito que você pode fazer para garantir que não faça parte dos 70%, mas é preciso mais trabalho do que apenas instalar um plug-in ou escapar de uma string. Muitos conselhos neste artigo vêm do guia da Sucuri sobre segurança do WordPress e anos de experiência pessoal.

O WordPress é inseguro?

O WordPress tem a maior participação de mercado entre os sistemas de gerenciamento de conteúdo e uma participação de mercado de 30% entre os 10 milhões de sites mais populares da web. Esse tipo de sucesso o torna um grande alvo para hacks. O WordPress não é menos seguro do que outros sistemas de gerenciamento de conteúdo – é apenas mais bem-sucedido.

Vulnerabilidades no núcleo do WordPress são responsáveis ​​por menos de 10% de todos os hacks do WordPress. A maioria deles é de instalações desatualizadas do WordPress. A quantidade de hacks que acontecem em falhas de segurança reais em versões atualizadas (também conhecidas como explorações de dia zero) no núcleo do WordPress é responsável por uma pequena porcentagem de todos os hacks.

O restante dos sites infectados foi causado por plugins, temas, hospedagem e usuários. E você, como desenvolvedor de sites WordPress, tem controle sobre tudo isso. Se isso parece um grande incômodo para você, então posso recomendar o plano de agência da Sucuri. Caso contrário, vamos descobrir como lidar com a segurança do WordPress!

Quem está atacando você e por quê?

Vamos quebrar um mito primeiro: um pequeno site WordPress ainda é um alvo atraente para hackers. Ataques pessoais são muito raros. A maioria dos sites invadidos do WordPress são comprometidos automaticamente por um bot ou uma botnet.

Bots são programas de computador que constantemente procuram sites para hackear. Eles não se importam com quem você é; eles apenas procuram uma fraqueza em suas defesas. Uma botnet combina o poder de computação de muitos bots para lidar com tarefas maiores.

Os hackers estão procurando principalmente uma maneira de entrar no seu servidor para que possam usar o poder de computação do seu servidor e liberá-lo em algum outro objetivo ou alvo. Os hackers querem seu servidor pelos seguintes motivos.

Enviando Spam

O spam é responsável por cerca de 60% de todos os e-mails e deve ser enviado de algum lugar. Muitos hackers querem entrar no seu servidor por meio de um plug-in defeituoso ou de uma versão antiga do núcleo do WordPress para que possam transformar seu servidor em uma máquina de spam.

Atacar outros sites

Ataques distribuídos de negação de serviço usam muitos computadores para inundar um site com tanto tráfego que eles não conseguem acompanhar. Esses ataques são muito difíceis de mitigar, especialmente quando são feitos corretamente. Hackers que invadem seu servidor podem adicioná-lo a um pool de servidores para atacar sites.

Roubando recursos

A mineração de criptomoedas é muito popular agora, mas exige muito poder de computação. Os hackers que não querem gastar muito dinheiro em um farm de servidores invadirão sites WordPress desprotegidos e obterão acesso a servidores ou aos visitantes de seus sites e roubarão poder de computação.

Pontuações de SEO impressionantes

Um hack particularmente popular para o WordPress é obter acesso ao seu banco de dados e adicionar um monte de texto (oculto) abaixo de cada postagem, vinculando a outro site. É uma maneira muito rápida de aumentar a pontuação de SEO, embora o Google esteja ficando mais atento a esse comportamento e as listas negras estejam aumentando.

### Roubando dados

Os dados são valiosos, especialmente quando estão vinculados a perfis de usuários e informações de comércio eletrônico. Obter esses dados e vendê-los pode gerar um lucro considerável para um invasor.

Por que a segurança é importante?

Além de não dar satisfação aos criminosos, há muitas razões pelas quais seu site deve ser seguro por padrão. Tendo limpado e lidado com muitos hacks do WordPress, posso dizer com certeza que eles nunca ocorrem em um momento conveniente. A limpeza pode levar horas e custará dinheiro a você ou ao seu cliente.

Para que um site WordPress hackeado volte a funcionar, você precisará remover e substituir todos os códigos de terceiros (incluindo o núcleo do WordPress); vasculhe seu próprio código linha por linha e todas as outras pastas no servidor para ter certeza de que ainda estão limpas; verificar se usuários não autorizados obtiveram acesso; e substitua todas as senhas no WordPress, em seu servidor e em seu banco de dados.

Muitos serviços podem limpar um site WordPress para você, mas a prevenção é muito melhor a longo prazo.

Além do custo da limpeza, os hacks também podem custar muito em vendas ou leads perdidos. Os hacks levam você para baixo nas classificações de pesquisa, resultando em menos visitantes e menos conversões.

Mais do que o custo financeiro, ser hackeado prejudica sua reputação. Os visitantes chegam ao seu site porque confiam em você. Ser hackeado prejudica sua reputação, e isso leva muito tempo para ser reparado.

Há também uma possibilidade real de problemas legais, especialmente se você tiver clientes na UE, onde a legislação GDPR entrará em vigor no verão de 2018. Essa nova legislação inclui uma multa pesada para violações de dados que não são tratadas adequadamente.

Dinheiro, reputação e problemas legais: uma segurança ruim pode custar muito caro. Investir algum tempo para configurar seu site, código e equipe com uma mentalidade de segurança definitivamente valerá a pena.

Vamos descobrir como podemos evitar toda essa maldade.

A Tríade da CIA

A tríade da CIA é uma estrutura básica para todo projeto de segurança digital. Significa confidencialidade, integridade e disponibilidade. A CIA é um conjunto de regras que limita o acesso às informações às partes certas, garante que as informações sejam confiáveis ​​e precisas e garante acesso confiável a essas informações.

Para o WordPress, a estrutura da CIA se resume ao seguinte.

Confidencialidade

Certifique-se de que os usuários conectados tenham as funções corretas atribuídas e que seus recursos sejam mantidos sob controle. Dê aos usuários apenas o acesso mínimo de que precisam e certifique-se de que as informações do administrador não vazem para a parte errada. Você pode fazer isso fortalecendo a área de administração do WordPress e tomando cuidado com nomes de usuários e credenciais.

Integridade

Mostre informações precisas em seu site e certifique-se de que as interações do usuário em seu site ocorram corretamente.

Ao aceitar solicitações no front e no back-end, sempre verifique se a intenção corresponde à ação real. Quando os dados são postados, sempre filtre os dados em seu código para conteúdo malicioso usando sanitização e escapes. Certifique-se de que o spam seja removido usando um serviço de proteção contra spam, como o Akismet.

Disponibilidade

Certifique-se de que seu WordPress, plugins e temas estejam atualizados e hospedados em um host WordPress confiável (de preferência gerenciado). Os backups automatizados diários também ajudam a garantir que seu site permaneça disponível ao público.

Todos os três elementos se apoiam um no outro para suporte. A integridade do código não funcionará sozinha se a senha confidencial de um usuário for facilmente roubada ou adivinhada. Todos os aspectos são importantes para uma plataforma sólida e segura.

Segurança é muito trabalho duro. Além do trabalho que pode ser feito em código, há um enorme elemento humano nesse framework. A segurança é um processo constante; não pode ser resolvido por um único plugin.

Parte 1: Integridade - Não confie em nada

Verifique a intenção das ações do usuário e a integridade dos dados que você está manipulando. Jogue seu hippie interior pela porta. Nada pode ser confiável online, portanto, verifique novamente tudo o que você faz para possíveis intenções maliciosas.

Validação e Sanitização de Dados

O WordPress é excelente em lidar com dados. Ele garante que todas as interações sejam validadas e que todos os dados sejam higienizados, mas isso é apenas no núcleo do WordPress. Se você está construindo seu próprio plugin ou tema ou apenas verificando um código de terceiros, saber como fazer isso é essencial.

 //Cast our variable to a string, and sanitize it. update_post_meta( $post->ID, 'some-meta', sanitize_text_field( (string)$_POST['some-meta'] ) ); //Make sure our variable is an absolute integer. update_post_meta( $post->ID, 'some-int', absint( $_POST['int'] ) );

Neste exemplo, adicionamos dois dados a uma postagem do WordPress usando update_post_meta. A primeira é uma string; então, nós o convertemos como uma string em PHP e removemos caracteres e tags indesejados com sanitize_text_field , uma das muitas funções de sanitização do WordPress.

Também adicionamos um inteiro a esse post e usamos absint para garantir que este seja um inteiro absoluto (e não negativo).

Usar as funções principais do WordPress, como update_post_meta , é uma ideia melhor do que usar o banco de dados do WordPress diretamente. Isso ocorre porque o WordPress verifica tudo o que precisa ser armazenado no banco de dados para as chamadas injeções de SQL. Um ataque de injeção de SQL executa código SQL malicioso por meio dos formulários do seu site. Esse código manipula o banco de dados para, por exemplo, destruir tudo, vazar dados do usuário ou criar contas falsas de administrador.

Se você precisar trabalhar com uma tabela personalizada ou realizar uma consulta complicada no WordPress, use a classe WPDB nativa e use a função prepare em todas as suas consultas para evitar ataques de injeção de SQL:

 $tableName = $wpdb->prefix . “my_table”; $sql = $wpdb->prepare( “SELECT * FROM %s”, $tableName ); $results = $wpdb->get_results( $sql );

$wpdb->prepare passa por todas as variáveis ​​para garantir que não haja chance de um ataque de injeção de SQL.

Escapando

A saída de escape é tão importante quanto a desinfecção da entrada. Validar os dados antes de salvá-los é importante, mas você não pode ter 100% de certeza de que ainda é seguro. Não confie em nada. O WordPress usa muitos filtros para permitir que plugins e temas alterem dados rapidamente, então há uma boa chance de que seus dados também sejam analisados ​​por outros plugins. Escapar dados antes de adicioná-los ao seu tema ou plugin é uma coisa inteligente a se fazer.

O escape destina-se principalmente a evitar ataques de scripts entre sites (XSS). Os ataques XSS injetam código malicioso no front-end do seu site. Um bônus adicional de dados de escape é que você pode ter certeza de que sua marcação ainda é válida depois.

O WordPress tem muitas funções de escape. Aqui está um exemplo simples:

 <a href=“<?php echo esc_url( $url );?>” title=“<?php echo esc_attr( $title );?>”><?php echo esc_html( $title );?></a>

Fuja o mais tarde possível. Isso garante que você tenha a palavra final sobre seus dados.

Protegendo solicitações

As solicitações de administração do WordPress já são bastante seguras se você tiver o SSL ativado e se tiver um host decente, mas ainda existem algumas vulnerabilidades. Você precisa verificar a intenção de um usuário e validar se a solicitação recebida é algo que foi feito pelo usuário logado real.

O WordPress valida a intenção com nonces. Um nonce (ou “número usado apenas uma vez”) não é realmente uma descrição precisa dessa API no WordPress. Ele não usa apenas números e é muito mais parecido com um token de falsificação de solicitação entre sites (CSRF) que você encontrará em todas as estruturas da Web modernas. Esses tokens garantem que os hackers não possam repetir solicitações. É muito mais do que apenas um nonce, mas o WordPress gosta de compatibilidade com versões anteriores, então o nome pegou.

Os nonces são enviados junto com cada solicitação vulnerável que um usuário faz. Eles são anexados a URLs e formulários e sempre precisam ser verificados na extremidade receptora antes de realizar a solicitação. Você pode adicionar um nonce a um formulário ou URL. Aqui está um exemplo usado em um formulário:

 <form method= “post”> <!-- Add a nonce field: --> <?php wp_nonce_field( 'post_custom_form' );?> <!-- other fields: → ... </form>

Nesse caso, estamos apenas usando a função auxiliar simples wp_nonce_field() , que gera dois campos ocultos para nós que ficarão assim:

 <input type="hidden" name="_wpnonce" value="e558d2674e" /> <input type="hidden" name="_wp_http_referer" value="/wp-admin/post.php?post=2&action=edit" />

O primeiro campo verifica a intenção usando um código gerado com a string 'post_custom_form' que passamos para a função. O segundo campo adiciona um referenciador para validar se a solicitação foi feita dentro da instalação do WordPress.

Antes de processar sua tarefa na outra extremidade do formulário ou URL, você verificaria o nonce e sua validade com wp_verify_nonce :

 if( wp_verify_nonce( $_REQUEST['_wpnonce'], 'post_custom_form' ) == false ){ wp_die( “Nonce isn\'t valid” ); }

Aqui, estamos verificando o nonce com nosso nome de ação e, se não corresponder, paramos de processar o formulário.

Código de terceiros

Plugins e temas de terceiros são um foco para hacks. Eles também são o osso mais difícil de quebrar ao garantir a segurança do seu site.

A maioria dos hacks do WordPress são causados ​​por plugins, temas e cópias desatualizadas do WordPress . Nenhum software é 100% seguro, mas muitos plugins e temas não são atualizados há algum tempo por seus desenvolvedores ou não são seguros para começar.

Menos código significa menos hackear. Portanto, antes de instalar outro plugin, pergunte-se se você realmente precisa dele. Existe outra forma de resolver este problema?

Se você tem certeza de que precisa de um plugin ou tema, julgue-o com cuidado. Observe a classificação, a data da “última atualização” e a versão PHP necessária ao navegar pelo diretório de plugins do WordPress. Se você encontrou o que está procurando e tudo parece funcionar, procure por qualquer menção a isso em um blog de segurança confiável, como Sucuri ou WordFence.

Outra opção é escanear o código e certificar-se de que contém nonces, saneamento e escape adequados; estes são geralmente sinais de código bem escrito e seguro. Você não precisa conhecer PHP ou fazer uma revisão de código completa. Uma maneira simples e rápida de verificar o uso adequado das funções de segurança do WordPress é pesquisar no código do plug-in essas strings:

  • esc_attr
  • esc_html
  • wp_nonce_field
  • wp_nonce_url
  • sanitize_text_field
  • $wpdb->prepare

Um plug-in ainda pode ser seguro se não incluir todas essas strings, mas se nenhuma ou um número baixo dessas strings for encontrado, isso é uma bandeira vermelha. Se você encontrar uma vulnerabilidade, compartilhe-a com o criador em particular e dê a eles tempo para corrigi-la.

Acompanhar vulnerabilidades no espaço de plugins do WordPress está ficando mais fácil com iniciativas como wpvulndb.

Nota: Alguns temas por aí agrupam versões de plugins com seu código. Este é um sintoma do WordPress não ter um ótimo gerenciamento de dependências pronto para uso, mas também é um sinal de um tema muito mal escrito. Sempre evite esses temas porque eles incluem bases de código que não podem ser atualizadas.

Temas e plugins raramente contêm código escrito por apenas um desenvolvedor. O Composer e o NPM tornaram muito mais fácil depender de outras bibliotecas que se tornaram um vetor de ataque popular. Se você estiver baixando um tema ou plug-in WordPress pronto para uso, isso realmente não é uma preocupação, mas se você estiver trabalhando com ferramentas que usam o Composer ou o NPM, não custa verificar suas dependências. Você pode verificar as dependências do Composer com uma ferramenta de interface de linha de comando (CLI) gratuita da SensioLabs. Um serviço como o Snyk (que você pode usar gratuitamente, mas que também possui opções premium) permite que você verifique todas as dependências do seu projeto.

Parte 2: Disponibilidade: Mantenha a simplicidade

Seu principal objetivo é manter seu site online sem interrupções. Mesmo com segurança de alto nível, você ainda pode ter problemas. Quando isso acontecer, um ótimo backup vai lhe poupar uma grande dor de cabeça.

Atualizações

O código aberto não pode existir sem atualizações. A maioria dos ataques em sites do WordPress acontece em versões desatualizadas do software principal ou dos plugins. Atualizações de segurança para o núcleo do WordPress agora são tratadas automaticamente (a menos que você tenha desativado isso, seu monstro!), mas atualizações de segurança em plugins são uma história diferente.

A atualização é normalmente segura com plugins populares e confiáveis, mas todos os plugins devem ser testados antes de serem lançados em seu site. Ferramentas como o WP CLI facilitam muito a atualização de tudo. O desenvolvedor líder do WordPress, Mark Jaquith, teve uma excelente postagem no blog sobre como atualizar todos os plugins automaticamente, mas gradualmente, para que você possa filtrar possíveis erros.

Usuários, funções e recursos

A “disponibilidade” na tríade da CIA tem a ver com obter informações nas mãos certas. Nossa principal prioridade com isso é limitar os recursos de seus usuários de back-end. Não dê a todos uma conta de administrador.

A conta de administrador no WordPress é extraordinariamente poderosa. Existe até uma opção no vanilla WordPress para alterar sua base de código completa de dentro da conta de administrador do WordPress. (Se isso é novo para você e você não desativou isso, faça isso.)

O sistema de funções e recursos no WordPress é poderoso e muito fácil de alterar no código. Eu crio muitas novas funções ao trabalhar com o WordPress. O principal benefício disso é que você obtém controle total sobre quais partes do sistema vários usuários acessam, mas outro grande benefício é que impede que o código de terceiros altere os recursos padrão do núcleo do WordPress.

E-mail

O WordPress geralmente lida com e-mail por meio do servidor em que está, mas isso torna todo o seu e-mail completamente dependente do servidor em que está sendo executado. Evite que seus e-mails sejam interceptados e vistos como spam usando um serviço SMTP. Muitas opções de plug-in estão disponíveis para garantir que todos os seus e-mails sejam enviados por uma conexão SMTP segura.

No entanto, você precisará acessar as configurações de DNS do nome de domínio para adicionar um registro Sender Policy Framework (SPF). Todos os bons serviços SMTP fornecerão o registro exato que precisa ser adicionado. Um registro SPF garante que seu serviço SMTP seja autorizado pelo domínio a enviar emails em seu nome.

Monitoramento

Monitorar seu site online é uma tarefa 24 horas por dia, 7 dias por semana, que pode ser totalmente automatizada. No caso do WordPress, estamos interessados ​​em tempo de atividade e integridade de arquivos.

Monitorar o tempo de atividade geralmente é algo que um bom host fará por você. Ferramentas como o Uptime Robot adicionam ainda mais segurança. Seus primeiros 50 sites são totalmente gratuitos.

Em relação à integridade do arquivo , se um hacker obtiver acesso ao seu servidor, ele poderá alterar seu código.

Neste caso, os plugins são a resposta para o seu problema. Sucuri tem um ótimo plugin de auditoria. Ele verifica todos os arquivos em sua instalação em um vasto banco de dados de códigos maliciosos conhecidos. Ele também verifica se o núcleo do WordPress ainda é 100% do núcleo do WordPress e avisa se houve uma violação, para que você possa corrigi-lo o mais rápido possível.

Backups

A melhor proteção contra falhas de todos os processos de segurança são os backups automatizados. A maioria dos bons hosts fará isso por você, mas existem outras boas opções se o seu host não oferecer backups. A Automattic cria um chamado VaultPress e ferramentas como BackupBuddy fazem backup em uma conta do Dropbox ou em um bucket do Amazon S3.

A maioria dos serviços confiáveis ​​no espaço de backup do WordPress são serviços premium ou plugins premium. Dependendo se você precisa controlar totalmente seus dados, talvez prefira um plug-in que vem com um host de nuvem, em vez de um serviço. Qualquer um vale cada centavo, no entanto.

Hospedagem

O WordPress não é o único software em execução no seu servidor. Muitos vetores de ataque estão abertos quando você está em uma hospedagem ruim. Na verdade, a má hospedagem é a principal razão pela qual o WordPress ainda suporta versões desatualizadas do PHP. No momento da redação, a própria página de estatísticas do WordPress informa que 32,5% de todas as instalações do WordPress estão sendo executadas em versões do PHP que não recebem mais atualizações de segurança.

Versões do PHP no WordPress a partir de 10 de maio de 2018. (Ver versão ampliada)

Observe os quase 60% das instalações rodando em PHP 5.6 e 7.0, que receberão patches de segurança somente até o final deste ano.

A hospedagem é importante não apenas para manter o software do seu servidor atualizado. Um bom host oferecerá muito mais serviços, como backups diários automatizados, atualizações automatizadas, monitoramento de integridade de arquivos e segurança de e-mail. Há uma grande diferença entre hosts gerenciados do WordPress e hosts que fornecem uma pasta online com acesso ao banco de dados.

O melhor conselho é encontrar um host WordPress gerenciado decente. Eles custam um pouco mais, mas fornecem uma ótima espinha dorsal para o seu site WordPress.

Parte 3: Confidencialidade

Se você se certificou de que sua base de código é a mais segura possível e está em um ótimo host WordPress, cercado por scanners e backups de malware, ainda terá problemas de segurança, porque as pessoas são as piores … na segurança da Internet.

Confidencialidade é educar a si mesmo, seu cliente e os usuários do site.

Dados confidenciais

Você pode não saber, mas seus plugins e temas provavelmente estão mostrando dados confidenciais valiosos. Se, por exemplo, você tiver WP_DEBUG definido como true , estará mostrando a cada hacker o caminho raiz do seu site no servidor. Os dados de depuração não devem ter lugar em seu site de produção.

Outra fonte de dados valiosa são os comentários e as páginas do autor. Estes são preenchidos com nomes de usuário e até endereços de e-mail. Um hacker pode usá-los em combinação com uma senha fraca para entrar no seu site. Tenha cuidado com o que você mostra ao mundo exterior.

Além disso, verifique novamente se você colocou wp-config.php em seu .gitignore .

Não codifique sozinho

Uma maneira de evitar que muitos erros entrem em sua base de código é praticar a programação em pares. Se você estiver sozinho, isso é muito mais difícil, mas muitas comunidades on-line estão disponíveis para fazer auditorias rápidas de código. O WordPress, por exemplo, usa o Slack para comunicar tudo sobre o desenvolvimento de sua plataforma. Você vai encontrar muitas pessoas lá que estão dispostas a ajudar. Alternativas mais lentas, mas melhores, são os fóruns do WordPress, StackOverflow e GitHub Issues, onde suas perguntas (e suas respostas!)

Pedir informações pode ser difícil, mas as pessoas adoram mostrar seus conhecimentos, e o WordPress em geral tem uma comunidade muito aberta e acolhedora. O ponto é que, se você nunca pedir informações sobre a qualidade do seu código, não terá ideia se o seu código é seguro.

Logins e senhas

Seus clientes precisarão fazer login no WordPress para gerenciar seu conteúdo. O núcleo do WordPress faz o que pode para evitar que senhas fracas passem, mas isso geralmente não é suficiente.

Eu recomendo adicionar um plug-in para autenticação de dois fatores ao seu site, juntamente com um limite de tentativas de login. Melhor ainda, elimine completamente as senhas e trabalhe com links mágicos.

Confie mas verifique

Até agora neste artigo, não falamos sobre engenharia social. É uma forma de hacking que está ganhando força, mas geralmente não é usada para invadir sites do WordPress. É, no entanto, uma excelente maneira de configurar a cultura em torno do seu site com a segurança em mente. Isso porque a melhor defesa contra a engenharia social é “Confie, mas verifique”.

Sempre que um cliente, um usuário ou seu chefe pede algo relacionado à segurança, a melhor maneira de lidar com isso é confiar, mas primeiro verificar se o que estão dizendo é verdade.

Um cliente pode alegar que precisa de acesso de administrador ao WordPress, mas seu trabalho é verificar se isso é verdade. Eles realmente precisam de acesso ou estão perdendo apenas um único recurso em sua função? Existe uma maneira de resolver esse problema sem adicionar possivelmente novos vetores de ataque?

“Confie, mas verifique” é um mantra simples, mas eficaz, quando se trata de questões de segurança, e pode realmente ajudar as pessoas a se atualizarem.

Conclusão

O WordPress é inseguro? Não, não é. O núcleo do WordPress está sendo constantemente atualizado e corrigido, e a maioria dos hacks do WordPress relatados não são do próprio WordPress. A cultura em torno do WordPress é insegura? Pode apostar!

Mas tendo a segurança em mente com cada linha de código que você escreve, cada usuário que você adiciona, cada plugin que você habilita e cada conta de hospedagem que você paga, você pode pelo menos garantir que está executando um site seguro que mantém sua reputação intacta e seu dados seguros.