Se 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);
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.
Very nice site!
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]
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+!
Muito bom