Arquivo

Textos com Etiquetas ‘captcha’

Implementando captcha reverso no WordPress

21, fevereiro, 2012 Sem comentários

CAPTCHA é um acrônimo do inglês Completely Automated Public Turing Test To Tell Computers and Humans Apart que identifica sistemas automatizados de diferenciação de humanos e máquinas. No WordPress ele serve, principalmente, para que bots não utilizem o formulário de comentários para a disseminação de SPAMs.

O problema da abordagem de CAPTCHA atual é que ele pune os usuários em vez de punir os bots, solicitando que digitem textos deformados que são exibidas em imagens. Além disso os bots atuais já são capazes de responder ao problema utilizando técnicas de OCR e com isso não cumprem mais com seu propósito.

No intuito de resolver o problema, a abordagem do CAPTCHA REVERSO visa identificar os bots e não os usuários humanos, de uma maneira simples:

Um campo oculto é adicionado ao formulário, o usuário humano não o preenche mas o bot não percebe e o preenche. Com isso feito basta ignorarmos todas as mensagens do formulário que estiverem com o campo oculto preenchido.

Você pode se perguntar: “O que ocorre com navegadores antigos e leitores visuais?”. Basta você adicionar uma mensagem falando que aquele campo deve ser deixado em branco.

Vamos ver agora como implementar isso no formulário de comentários do WordPress:

Passo 1: No arquivo comments.php, que está dentro do diretório do seu tema (wp-content/themes/<seu tema>/) localize o formulário dos comentários. No exemplo abaixo, o campo email foi duplicado e teve seus atributos id e name renomeados para lastname. Ao campo que será escondido foi adicionado o id comment-email.

<div class="row">
  <input id="lastname" class="textfield" tabindex="2" type="text" name="lastname" value="" size="24" />
  <label class="small" for="lastname"><!--?php _e('E-Mail (will not be published)', 'inove');?--></label>
</div>
<!-- Reverse Captcha Field-->
<div id="comment-email" class="row">
  <input id="email" class="textfield" tabindex="2" type="text" name="email" value="" size="24" />
  <label class="small" for="email">Deixe em branco <!--?php if ($req) _e('(required)', 'inove'); ?--></label>
</div>
<!-- End of Reverse Captcha Field-->

Passo 2: No arquivo style.css, que está no mesmo diretório do tema, adicione o seletor para ocultar o id do campo extra.

#comment-email {
	display:none;
}

Passo 3: No arquivo wp-comments-post.php, que está na raiz da instalação do WordPress, localize o código que captura os parâmetros do formulário. Altere a variável $comment_author_email para o campo correto, neste caso lastname. Finalizando, capture o valor do campo oculto e utilize um if para verificar se ele está preenchido e cancelar o comentário.
Aproveite o momento para mandar uma bela mensagem de despedida para seu amigo bot :)

$comment_author_email=(isset($_POST['lastname']))?trim($_POST['lastname']):null;
 
//Reverse Captcha
$fake_email = ( isset($_POST['email']) )   ? trim($_POST['email']) : null;
if ($fake_email != null){
	wp_die( '<strong>ERROR</strong>: Die stupid bot!');
}//if

Esta implementação é uma das muitas possíveis utilizando esta estratégia. Este sistema funciona muito bem, mas não é a prova de falhas como tudo em computação.
Seria interessante um plugin? A principio sim, pois eliminaria a necessidade de alterações manuais no código. Porém uma implementação padronizada e utilizada por várias pessoas seria facilmente burlada pelos bots. Logo seja criativo e implemente a sua própria versão.

Espero que tenha ajudado!
Quaisquer dúvidas é só postar abaixo.