5 melhores maneiras de resolver a vulnerabilidade do WordPress
Publicados: 2020-02-01Atualmente, o WordPress cobre 33% da web. Isso significa que um grande número de usuários está usando, o que definitivamente atrairá mais invasores e hackers. Devido a isso, existem mais ameaças e ataques como ataque de injeção de SQL, ataque de redirecionamento, ataque CSRF, ataque XSS, etc, que causam uma vulnerabilidade no WordPress. Por esse motivo, isso não significa que o WordPress não seja seguro. Temos que nos concentrar na higienização de dados, validação de dados, escape de dados, uso e verificação de nonce, redirecionamento seguro, recursos do usuário etc. para tornar o WordPress seguro. No entanto, as vulnerabilidades do WordPress o tornam inseguro. Então, vamos discutir os problemas de segurança do WordPress.
Vulnerabilidades também chegam ao WordPress. Mas como?
Por um lado, existem grandes ameaças e ataques devido à vulnerabilidade do WordPress . Por outro lado, devemos superar ou prevenir esses ataques com nosso código durante o desenvolvimento do WordPress.
Mesmo que você não seja um desenvolvedor WordPress, recomendamos que você leia o post porque você poderá conhecer os principais ataques que atraem hackers para atacar seu site. E você também poderá entender como conhecer plugins e temas mal codificados do WordPress. Se você administra uma loja online, é útil decidir os melhores plugins e temas do WooCommerce que são seguros.
Vulnerabilidades de segurança do WordPress
De onde vêm os códigos vulneráveis?
A princípio, devemos ter uma boa compreensão de onde estão os problemas de segurança do WordPress . O WordPress consiste no código principal do WordPress, temas e plugins que incluem Php, Html, javascript e outros códigos.
A comunidade de código aberto inspeciona o WordPress Core Code. Há um grande número de pessoas que relatam o bug e corrigem as vulnerabilidades e levam o crédito por isso. A vulnerabilidade no WordPress pode ser explorada por ataque SQL Injection, ataque CSRF, ataque XSS, ataque de redirecionamento e outras técnicas semelhantes. Portanto, a vulnerabilidade do WordPress do desenvolvimento principal não é muito.
Nem os temas costumam interagir com bancos de dados wp, nem os sites mudam de tema com frequência. Como Gutenberg é o editor padrão do WordPress, precisamos escolher os Temas WordPress Compatíveis com Gutenberg para melhor desempenho e segurança. Assim, menos vulnerabilidades ocorrem com ele.
Por outro lado, os plugins do WordPress possuem recursos e comportamentos complexos. Além disso, a interação é alta com usuários e bancos de dados. O site inclui um grande número de plugins para ter recursos externos. Como resultado, eles podem trazer um grande número de vulnerabilidades para o site. Plugins introduzem grandes vulnerabilidades no WordPress.

De acordo com wpscan.org, 11% das vulnerabilidades vêm de temas, enquanto 37% das vulnerabilidades vêm do desenvolvimento do WordPress Core. Da mesma forma, o restante 52% vem de Plugins. Suponho que você já saiba o que é um plugin WordPress
Ameaças e Ataques
Se você é um desenvolvedor de temas ou plugins WP, deve ter um bom conhecimento de ameaças e ataques para tornar seu código seguro e reduzir a vulnerabilidade do WordPress.

Existem muitos ataques, como ataque de injeção de SQL, ataque XSS, ataque de redirecionamento, ataque CSRF, que podem ser evitados por sanitização de dados, validação de dados, escape de dados, uso e verificação de nonce, redirecionamento seguro, recursos do usuário, etc.
Como desenvolvedor, seu inimigo geralmente é um usuário mal-intencionado. Esses usuários prejudicam nosso código. Quando incorporamos Never Trust User Inputs em nosso comportamento diário de codificação, já estamos a meio caminho de escrever um código mais seguro para reduzir problemas de segurança no WordPress. Isso facilitará seu trabalho como personalizador do WordPress.
Vulnerabilidade do WordPress – Ataque de injeção de SQL
Em uma tentativa de recuperar dados críticos e confidenciais, o ataque de injeção de SQL injeta um código SQL malicioso no banco de dados WP. Eles visam sites WordPress que usam um banco de dados SQL – MySQL, Oracle, SQL Server, etc.
Com esta intenção, eles têm acesso à senha, endereço de e-mail ou qualquer dado sensível, pois podem facilmente adicionar, editar ou ler os dados.
Podemos tomar um exemplo da famosa história em quadrinhos “Bobby Tables”.

Neste quadrinho uma senhora mantém o nome de seu filho 'Robert'); DROP TABLE Alunos; –')'; com comando SQL que ao entrar no banco de dados irá deletar toda a tabela do aluno da escola caso o nome não tenha sido higienizado.
Portanto, para evitar a injeção de SQL, devemos higienizar os dados de entrada do usuário.
Vamos discutir a sanitização de dados em detalhes.
Sanitização de dados
Sanitizar significa proteger a entrada, limpar a entrada do usuário. Este processo remove texto inválido, caracteres UTF-8 ou código da entrada para diminuir a vulnerabilidade no WordPress.
Ele converte caracteres específicos de HTML em entidades, remove todas as tags. Ele também remove quebras de linha, guias e um espaço em branco extra, tira octetos que são motivo de grandes problemas de segurança no WordPress.
Existem muitas funções internas do WordPress para higienizar os dados. Alguns deles estão na lista abaixo:
- Sanitize_email(): Remove todos os caracteres que não deveriam estar no email
- Sanitize_text_field(): Sanitiza uma string (da entrada/banco de dados do usuário)
- Sanitize_file_name(): Tira caracteres (de um nome de arquivo)
- Sanitize_key(): Tira chaves, exceto para caracteres alfanuméricos minúsculos, traços e sublinhados.
Exemplo de sanitização de dados:
$title=sanitize_text_field($_POST['title']); update_post_meta($post->ID,'title',$title);
Aqui, a princípio, estamos higienizando o título. Após a higienização, estamos atualizando o valor do título no banco de dados wp.
$Name= ' Robert'); DROP TABLE Students; --') '; INSERT INTO Students VALUES ('$Name'); INSERT INTO Students VALUES ('Robert'); DROP TABLE Students; --')
Aqui no comando SQL acima o nome tem string e caracteres especiais e entidades que inseriram na tabela do aluno, o nome 'Robert'); Isso fecha o comando insert SQL e outro comando começa a ser executado com metade do nome DROP TABLE Estudantes; –')'; e esta drop table os alunos excluem todos os registros dos alunos do banco de dados.
Portanto, aqui, se a sanitização foi feita antes de inserir o valor no banco de dados, você não perderia toda a tabela do banco de dados do aluno.
Vejamos um exemplo abaixo para fazer a sanitização.
$Name=sanitize_text_field("' Robert'); DROP TABLE Students; --') ';"); $sql = $wpdb->prepare("INSERT INTO Students VALUES ($Name)"); /* this will only insert 'Robert DROP TABLE Students' */ $wpdb->query($sql);
Aqui no exemplo acima, a sanitização removeu as entidades e caracteres extras do nome e permite que apenas a string seja inserida em um banco de dados. Dessa forma, podemos inserir os dados com segurança e estar protegidos contra injeções de SQL.
Siga este link para saber mais sobre como proteger a entrada .
Vulnerabilidade do WordPress – Ataque XSS
O ataque Cross-Site Scripting (XSS) injeta código javascript de linguagem de script vulnerável para roubar dados semelhantes de outro usuário, como cookies, tokens de sessão e outras informações. Se tivermos informações de cookies, podemos nos conectar automaticamente. Problemas de segurança no WordPress vêm com cookies roubados, pois podemos fazer login facilmente com outras identidades.
Ele é executado em um navegador. Milhões de pessoas que estão navegando no site serão afetadas por esse ataque. Sem dúvida, este ataque é um dos ataques mais graves.

Exemplo de ataque XSS:
<script
<script
type=”text/javascript”>
var hacker
='../hacker.php?
cookie_data='
+escape(document.cookie);
</script>
</script>
Aqui neste exemplo de ataque XSS, os cookies escapam e são enviados para a variável 'cookie_data' do script hacker.php
Se o invasor injetar esse script no código do site, ele será executado no navegador do usuário e os cookies serão enviados ao invasor, o que é um problema perigoso. Então, para evitar isso, precisamos validar. Valide e limpe todos os dados de entrada do usuário e escape dos dados de saída.
Vamos discutir em detalhes abaixo.
Data de validade
Validar é verificar a entrada do usuário. Isso é feito para verificar se o usuário insere um valor válido ou não.
Existem três maneiras de validar os dados que são funções PHP integradas, funções centrais do WordPress e funções personalizadas. Nunca fuja disso para evitar a vulnerabilidade do WordPress. Alguns deles estão na lista abaixo:
- isset()/empty(): verifica se a variável existe ou não
- is_email(): verifique se os dados fornecidos estão em formato de email ou não
- is_serialized(): verifique se o valor é string ou não
Exemplo de validação de dados:
$number='12323'; if(intval(number)){ //do your things } else{ esc_html_e('Enter valid number','text-domain'); }
O exemplo acima verifica se os dados de entrada são um número ou não, ele só executará o programa se for um número. Assim, a validação de dados ajuda a reduzir os problemas de segurança do WordPress.
Siga este link para saber mais sobre validação de dados
Escape de dados
Escapar é garantir a saída. É o processo de remover dados indesejados, como HTML malformado ou tags de script. O escape não apenas converte os caracteres HTML especiais em entidades HTML, mas também exibe, em vez de execução. Isso é feito para evitar ataques XSS e também para garantir que os dados sejam exibidos da maneira que o usuário espera que sejam.
O WordPress fornece algumas funções auxiliares. Eles são usados para a maioria dos casos. Alguns deles são:
- esc_html(): Escape de caracteres específicos de HTML
- esc_attr(): escapa o valor dos atributos das tags HTML
- esc_url(): escapa dos atributos de referência de hipertexto
Exemplo de escape de dados:
$url
=
"javascript
:
alert
('Hello')";
<a
href=
"<?php
echo
esc_url
($url)
;?>">
Text
</a>
href=
"<?php
echo
esc_url
($url)
;?>">
Text
</a>
No exemplo acima, o hacker inseriu o código da linguagem de script para desafiar os problemas de segurança do site WordPress. Então, para evitar isso, usamos esc_url para escapar do valor da URL e depois disso apenas estamos ecoando o valor em nosso código. Desta forma, impedimos o ataque XSS.
Vulnerabilidade do WordPress – Ataque CSRF
Discutindo mais em Vulnerabilidade do WordPress, o ataque Cross-Site Request Forgery é ameaças e ataques de um clique ou ataque de sessão.
O ataque CSRF permite que um invasor force um usuário conectado a realizar uma ação importante sem seu consentimento ou conhecimento.
Aqui, um usuário autorizado transmite comandos não autorizados.
Ele se baseia na ideia de que um usuário autorizado enviado para uma determinada página ou URL pode fazer coisas que eles não percebem que fizeram. Além disso, pode ser corrigido com o uso de nonce e verificar nonce.
Usando Nonce
O WP gera um token de segurança chamado nonce. É um número único não repetitivo apenas para você que pode ser usado por você para uma operação específica. O valor nonce é válido por 24 horas, após o que expira e o novo será gerado pelo wp. Você também pode definir o tempo de validação para nonce também.
Ele protege URLs e formulários contra uso indevido para reduzir os problemas de segurança existentes no WordPress.
Além disso, para proteger o formulário com um nonce, crie um campo nonce que esteja oculto usando a função wp_nonce_field():
<form method="post"> <!-- some inputs here ... --> <?php wp_nonce_field( 'name_of_my_action', 'name_of_nonce_field' ); ?> </form>
Abaixo estão algumas funções para nonce:
- wp_nonce_url() – Para adicionar um nonce a uma URL.
- wp_create_nonce() – Para usar um nonce de maneira personalizada para processar solicitações AJAX.
Verificando um Nonce
- check_ajax_referer() – Verifica o nonce (mas não o referenciador), e se a verificação falhar, por padrão, ele encerra a execução do script.
- wp_verify_nonce() – Para verificar um nonce.
if(isset($_POST['name_of_nonce_field']) && wp_verify_nonce($_POST['name_of_nonce_field'],'name_of_my_action')){ //do something } else{ esc_html_e('Sorry,your nonce did not verify.','text-domain'); }
Siga este link para saber mais sobre nonce
Vulnerabilidade do WordPress – Ataque de redirecionamento
A vulnerabilidade do WordPress também faz com que os visitantes do site sejam redirecionados automaticamente para um site malicioso.
Isso geralmente ocorre quando um visitante redireciona para qualquer outra página em vez da página ou site solicitado.
Se o seu site tiver alto tráfego, esse ataque pode levar a menos tráfego para seu site. Você nem vai perceber que o visitante do seu site será redirecionado para qualquer outra página. No entanto, ele pode ser corrigido com a ajuda do Safe Redirect.
Redirecionamento seguro
Após uma ação ou formulário, se você estiver redirecionando um usuário para qualquer página, use wp_safe_redirect. wp_safe_redirect verifica se há um host permitido. Se o host não for permitido, ele redirecionará para a URL do site. Portanto, impedirá o redirecionamento malicioso para outro host. Mas isso não é verificado pelo wp_redirect. Portanto, para reduzir os problemas de segurança do WordPress, usar wp_safe_redirect é uma maneira mais segura de redirecionar os links.
$redirect=admin_url('edit.php'); wp_safe_redirect($redirect);
Vulnerabilidade de recursos do usuário
Além do ataque de redirecionamento, ataque XSS, ataque CSRF e ataque SQL Injection, o WordPress também é vulnerável às capacidades do usuário. Se você estiver permitindo que qualquer usuário acesse seu site para enviar quaisquer dados, verifique os recursos do usuário. Caso contrário, você será vítima de ameaças e ataques.
Quanto maior a função do usuário, mais recursos o usuário possui.
Às vezes, os desenvolvedores simplesmente esquecem de garantir que o usuário que está em uma página enviando um formulário tenha os privilégios necessários para executar a ação ou não. Ele trará uma fonte comum de vulnerabilidade do WordPress.
if ( current_user_can( 'edit_posts' ) ) { edit_post_link( esc_html__( 'Edit', 'wporg' ), '', ''); }
Vamos dar um exemplo de vulnerabilidade do Contact Form 7 (tipo de vulnerabilidade do WordPress)
O número de ativação deste plugin é de mais de 5 milhões de usuários. Se houver um único código vulnerável, ele afetará mais de 5 milhões de pessoas.

Houve uma vulnerabilidade de capacidade em 5.0.3 e versões anteriores. Um usuário conectado na função de Colaborador pode editar facilmente formulários de contato. Por padrão, era acessível apenas para usuários com funções de Administrador e Editor.
Então, havia uma chance maior de ser um hack. A nova versão do plugin resolveu esses erros.
Sempre retornar ou sair no WordPress
Se você perdeu o retorno ou morreu após a conclusão do seu código enquanto escrevia qualquer função ou chamada ajax. Pode parecer simples, mas pode levar a importantes problemas de segurança.
Certifique-se de sempre adicionar retorno e morrer no lugar que você pretende. Você pode dar um exemplo do bug #gotofail da Apple.
defined( 'ABSPATH' )
defined( 'ABSPATH' )
or die
( "No script kiddies please!" );
function
function
adls_view()
{ global $wpdb;
{ global $wpdb;
include( 'inc/frontend/smls-detail/smls-grid-inline.php' );
exit(); }
function
function
adls_generate_random_string
( $length ){
$string =
'1234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
$random_string
=
'';
for
( $i = 1; $i <= $length; $i ++ )
{
{
$random_string .=
$string[ rand( 0, 61 ) ];
}
return
$random_string;
}
}
Empacotando
Este foi um post importante para profissionais do WordPress que se preocupam com segurança. A partir deste post, você aprendeu sobre as várias ameaças e ataques que trazem vulnerabilidade ao WordPress. Ele inclui uma breve introdução sobre o ataque SQL Injection, ataque XSS, ataque CSRF, ataque de redirecionamento e muito mais.

As várias técnicas, como sanitização de dados, validação de dados, escape de dados, uso e verificação de nonce, redirecionamento seguro e recursos do usuário também foram discutidas. Devido a isso, existem problemas de segurança no WordPress.
Em conclusão ,
- Nunca confie na entrada do usuário para evitar a vulnerabilidade do WordPress.
- Valide, higienize todas as entradas e escape de todos os dados de saída
- Vamos confiar no WordPress!
Se você enfrentou algum problema em relação às ameaças e ataques mencionados acima, informe-nos sobre isso. Nossos especialistas lhe darão uma solução adequada com base no seu problema.