Protegendo seus formulários com o Text_CAPTCHA

PEAR
Enviado por Pedro Faria em Sex, 21/10/2005 - 08:49.PEAR

Hoje eu precisei fazer um formulário com proteção daquelas letrinhas doidas que o usuário tem que digitar... o nome disso é captcha...

O exemplo que tem lá num artigo de PHP_Security_Consortium (Leia o Artigo) obriga o cara a escrever a imagem em um arquivo... nem gostei disso e nem sei se isso funcionaria legal em um site com muuuuuitos acessos simultaneos.

Fiz, então, uma forma legal para funcionar sem ter que gerar um arquivo FIXO de image usando sessão.

Estou levando em consideração que o Text_CAPTCHA já esta pronto para o uso. No artigo citado acima, explica como instalar.

Bem... vamos lá.

Primeiro crie um arquivo que gerará a image...

  1. <?php
  2.  
  3.  
  4. require_once 'Text/CAPTCHA.php';
  5. $captcha = Text_CAPTCHA::factory('Image');
  6.  
  7. // Altere para dados VÁLIDOS e verifique se esta fonte existe.
  8. $options = array('font_size'=>'20',
  9.                  'font_path'=>'./',
  10.                  'font_file'=>'Vera.ttf');
  11.  
  12. $captcha->init(150, 60, NULL, $options);
  13.  
  14. // Coloca a frase na sessão
  15. $_SESSION['captcha_phrase'] = $captcha->getPhrase();
  16.  
  17. $image = $captcha->getCAPTCHAAsJPEG();
  18.  
  19. header("Cache-Control: no-store, no-cache, must-revalidate");
  20. header('Content-Type: image/jpeg');
  21.  
  22. imagejpeg($captcha->_im);
  23.  
  24. ?>

Este arquivo mostra a imagem e coloca a frase de verificação na sessão ($_SESSION['captcha_phrase']).

Agora, crie o arquivo com formulário.

  1.     <form action="arquivo.submit.php" method="POST">
  2.         Name: <input type="text" name="name" /><br />
  3.         Email: <input type="text" name="email" /><br />
  4.         Comment: <textarea name="comment"></textarea>
  5.         <input type="submit" />
  6.         <input type="text" name="captcha_phrase" /><br />
  7.         <!-- IMAGEM DO CAPTCHA -->
  8.         <img src="captcha.php" />
  9.     </form>
  10. </body>
  11. </html>

Bem, até aqui agente consegue mostrar a imagem do captcha no formulario. Vamos fazer a validação para fechar o post. Lembre-se que, da forma que estamos fazendo, o action do formulário, não pode ser no mesmo arquivo do formulário.

  1. <?php
  2.  
  3.  
  4. if ($_POST['captcha_phrase'] != $_SESSION['captcha_phrase']) {
  5.  
  6.     echo "ERRO";
  7.  
  8. } else {
  9.  
  10.     echo "OK";
  11.  
  12. }
  13.  
  14. unset($_SESSION['captcha_phrase']);
  15.  
  16. ?>

Bem, acho que terminamos... se alguem tiver mais alguma ideia para melhorar isso, comenta ae.

t+



Enviado por guest (não verificado(a)) em Sex, 21/10/2005 - 10:00.

Esse negócio de Captcha é interessante...... chatíssimo para o usuários, mas legal para o site ou desenvolvedor!

Agora, dá pra implementar o captcha e sua validação por AJAX, antes de processar o form.... ai vc pode até colocar o "Não consegue ler?", e gerar outra imagem na hora!!

Abraços!

Enviado por João Marcos (não verificado(a)) em Qui, 28/12/2006 - 19:25.

Gostária de entrar em contato com vc via telefone pra tirar algumas duvidas.
jmsistem@jmsistem.com.br
Se possivel. muito grato

Enviado por Pedro Faria em Sex, 29/12/2006 - 09:30.

Caro João... solicito que use nosso fórum ou nosso canal de irc...

grato