Compartilhe com um Amigo:

BotDetectSe você tem campos com formulários públicos em seu site (contatos, comentários, guestbooks, etc.) provavelmente já recebeu massagens automáticas deixadas por spammers. Dependendo da frequência e quantidade, essas massagens podem chegar até a comprometer o desempenho de seu servidor, além de encher seu BD de lixo eletrônico.

Uma maneira eficiente de barrar esse problema  é a implementação do CAPTCHA – uma imagem com uma string gerada aleatoriamente que verifica se quem esta tentando deixar a mensagem é realmente uma pessoa.

Um CAPTCHA é um tipo de desafio-resposta, teste utilizado na computação para determinar se o usuário é humano, CAPTCHA  é um acrônimo para “Completely Automated Public Turing test to tell Computers and Humans Apart” (teste de Turing público completamente automatizado para diferenciação entre computadores e humanos), registrado pela Carnegie Mellon University.

Neste artigo vamos apresentar um script PHP bastante simples, com ele vamos criar uma imagem CAPTCHA totalmente funcional a partir de funções nativas do PHP e da GD (PHP graphics library), vamos criar um arquivo a parte, chamado “captcha.php” que será responsável pela geração da imagem-teste.
Também vai ser necessário uma pequena imagem base que será usada pela função “imagecreatefromjpeg()” como base de nosso  CAPTCHA, você pode cria-lá com o MSPaint.

Vejam o Código do “captcha.php”:

   1: <?php

   2: session_start();

   3: header("Expires: Mon, 26 Jul 1997 05:00:00 GMT"); 

   4: header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT"); 

   5: header("Cache-Control: no-store, no-cache, must-revalidate"); 

   6: header("Cache-Control: post-check=0, pre-check=0", false);

   7: header("Pragma: no-cache");

   8:  

   9: function gerachar($length=6)

  10: {

  11:     $_rand_src = array(

  12:         array(48,57) //números

  13:         , array(97,122) //letras maiúsculas

  14:         , array(65,90) //letras minúsculas

  15:     );

  16:     srand();

  17:     $random_string = "";

  18:     for($i=0;$i<$length;$i++){

  19:         $i1=rand(0,sizeof($_rand_src)-1);

  20:         $random_string .= chr(rand($_rand_src[$i1][0],$_rand_src[$i1][1]));

  21:     }

  22:     return $random_string;

  23: }

  24:  

  25: $img = @imagecreatefromjpeg("fundo.jpg"); 

  26: $rand = gerachar(4);

Veja também

  27: $_SESSION['captcha'] = $rand;

  28: ImageString($img, 5, 5, 7, $rand[0]." ".$rand[1]." ".$rand[2]." ".$rand[3], ImageColorAllocate ($img, rand(0,255), rand(0,255), rand(0,255)));

  29: Header ('Content-type: image/jpeg');

  30: imagejpeg($img,NULL,100);

  31: ImageDestroy($img);

  32: ?>

Agora é só chamar a imagem CAPTCHA a partir de um formulário HTML:

   1: <?php session_start() ?>

   2: <form method="post" action="">

   3: <table bgcolor="#CCCCCC">

   4: <tr><th>Deixe seu recado:</th></tr>

   5: <tr><td><textarea cols="30" rows="5" name="message"></textarea></td></tr>

   6: <tr><td align="center">CAPTCHA:<br>

   7:     (Digite o código da imagem)<br>

   8:     <table><tr><td><img src="captcha.php" alt="Você é humano?"></td>

   9:     <td><input type="text" name="captcha" size="4" maxlength="4"></td></tr></table>

  10: </td></tr>

  11: <tr><th align="center"><input type="submit" value="Submit"></th></tr>    

  12: </table>

  13: </form>

  14: <?php

  15: if(isset($_POST["captcha"]))

  16: if($_SESSION["captcha"]==$_POST["captcha"])

  17: {

  18: 

  19:     echo 'Código correto, seu recado foi enviado!';

  20: }

  21: else

  22: {

  23:     echo 'Código incorreto; tente novamente...';

  24: }

  25: ?>

O “pulo do gato” de nosso código é que o mesma variável aleatória  responsável pelo criação do código  de verificação é passada pela seção PHP para ser testada.

Download do script exemplo

Veja Também

Este post tem 4 comentários

  1. Very nice site!

  2. Em primeiro lugar muuito obrigado pelo tutorial. Funcionou. Mas poderia me informar a linha de comando para eu fazer com quer o usuário seja direcionado para uma página de erro caso digite o código errado; e para outra página caso digite o código corretamente. Atenciosamente,
    [email protected]

    1. Oi amigão, esta é a parte do script que faz a verificação:

      
      

      Se você que direcionar o usuário para uma página de erro ao invés de exibir a mensagem, basta substituir o echo por um header(“Location:erro.php”).
      T+!

Deixe o seu comentário:

Fechar Menu
%d blogueiros gostam disto: