segunda-feira, 31 de março de 2008

Implementando Captcha em aplicações GeneXus

Olá pessoal,

Começarei a escrever alguns artigos aqui no blog. E nesse primeiro artigo falarei sobre como implementar captcha em aplicação GX.

CAPTCHA (completely automated public turing test to tell computers and humans apart) é uma técnica utilizada para verificar se quem está requisitando um determinado serviço do software é um usuário, e não uma aplicação robô. A idéia basicamente é
apresentar caracteres de validação para que sejam digitados pelo usuário para serem validados pela aplicação, esses caracteres devem ser legíveis a humanos, mas não para aplicações. Geralmente isso é feito através de imagens com caracteres distorcidos.

A técnica é muito utilizada para evitar spam em listas de discussão, chats, e telas de cadastro que não requerem login.

Para o exemplo que irei mostrar, vou utilizar o web service TRYNT CAPTCHA, que é gratuito. Ele fornece um mecanismo simples para a geração de imagens 100 x 50 pixels e oferece uma seleção de cinco diferentes estilos de fontes e controle sobre as cores.


Para mais informações sobre este web service, acesse http://www.trynt.com/trynt-captcha-api/

Vamos ao que interessa, a implementação:

O primeiro passo é criar uma web panel e definir as seguintes variáveis:
  • &b - caracter(6)
  • &bg - caracter(6)
  • &c - caracter(6)
  • &code - caracter(4)
  • &fg - caracter(6)
  • &fo - numérico(1)
  • &httpClient - HttpClient
  • &reader - XmlReader
  • &retorno - caracter(150)
  • &img - bitmap
No form da web panel insira as seguintes variáveis criadas juntamente com um texblock, ficando mais ou menos dessa maneira:

code -&code
fo - &fo
bg - &bg
fg - &fg
b - &b
c - &c

Enviar dados -> (será o botão que executará o evento)

&img - (onde será exibida a imagem gerada pelo web service)

Na aba de eventos da web panel, escolha o evento Enter, esse evento é o que está associado ao botão
Enviar dados e entre com o seguinte código:


(clique na imagem para melhor visualização do código)

Vamos as explicações:

Nas linhas 2 e 3 informo o endereço do provedor do web service e a porta no qual atende a requisição.
A linha 4 é onde invoco o serviço, utilizando o método GET do protocolo HTTP.
Nas linhas 6 e 10 é feito uma verificação para ver se houve algum erro.
Na linha 15 é onde obtenho a resposta do serviço, ele retorna um xml que contém o endereço da imagem.
As linhas 16 a 19 é onde leio o xml e retiro o path da imagem.
Na linha 21 carrego a variável &img com o path recuperado na variável retorno, utilizando o comando loadbitmap.

Espero comentários e sugestões de vocês.

Um abraço e até a próxima!

2 comentários:

Eder Reis Provasi disse...

Eu não testei ainda, mas como seria para receber caracter de retorno? por exemplo: 'Ok' ou 'Erro' ?

Bruno disse...

No exemplo eu não faço o tratamento do que foi digitado.

Vc teria que implementar a rotina.

Isso foi feito para GX 9.0 eu recomendo vc usar versões mais novas do GX, pois elas já têm recursos de capctha muito bons.