Arquivo

Archive for fevereiro \23\UTC 2011

Como adicionar Captcha na aplicação JSF – solução com Recaptcha

Um problema muito sério em aplicações que possuem acesso aberto na internet é o uso de softwares automatizados que enviam inúmeras requisições seguidas, normalmente com a pretensão de gerar spam, diminuindo o desempenho de sistemas e gerando prejuízo às empresas.

A técnica mais utilizada para evitar esse problema é o emprego de imagens com letras distorcidas, que em alguns casos pode ter a adição de uma seqüência obscurecida das letras ou dos dígitos que aparecem na tela. O objetivo é evitar o uso de robôs, já que eles não conseguem fazer a leitura de imagens. Essa solução é conhecida como Captcha (da sigla Completely Automated Public Turing test to tell Computers and Humans Apart) e embora tenha recebido esse nome, é visto como um Teste de Turing reverso, uma vez que é administrado pelo computador e não por humanos.

No meus testes em JSF consegui utilizar as soluções do Tomahawk, do PrimeFaces, do JCaptcha e do Recaptcha. Todos são muitos simples de adicionar à aplicação, mas o Tomahawk  e o JCaptcha integrado ao JSF usam, para fazer a validação, um atributo em escopo de sessão com o valor da chave, o que muitas vezes não é desejado a nível de arquitetura. Já o PrimeFaces tem como base o Recaptcha da Google, mas a maioria dos desenvolvedores (eu me incluo entre eles) usa o RichFaces como solução de biblioteca de interface rica, tornando-se impensável colocar o PrimeFaces na aplicação apenas para ter o componente Captcha.

Por fim, meu último teste foi o Recaptcha, da Google. Vamos às vantagens da solução:

  1. Não utiliza a chave como atributo de sessão para validar a imagem;
  2. Ajuda a digitalizar livros e jornais (no momento estão sendo digitalizadas edições do The New York Times e livros do Google Books);
  3. É acessível para deficientes visuais;
  4. É popular: empresas como Facebook e TicketMaster utilizam;
  5. Tem compatibilidade com várias linguagens e aplicações.

Obviamente que nem tudo são flores. As desvantagens são:

  1. O serviço da Google está na web, portanto se ele cair (pouco provável), ou se o host onde a aplicação Java está não conseguir comunicação com ele, o componente não será exibido;
  2. O componente possui uma visual mais complexo do que os outros, o que às vezes confunde o usuário;

Pesando as desvantagens e as vantagens, decidimos optar pelo Recaptcha, que se mostrou com a melhor relação entre os dois aspectos. Vamos ao que interessa: como colocar na aplicação.

Leia mais

Anúncios

Como desabilitar copiar e colar em Rich:Editor

Aqui na UECE temos um sistema com um rich:editor e muitas vezes apareceram problemas na exibição de páginas internas por conta de o usuário que estava cadastrando a informação ter colado o texto dentro do componente ro RichFaces a partir do Word ou algum programa semelhante. O problema está no fato de que esses programas geram uma grande carga de estilização antes da exibição da informação em si, e quando você vai mostrar o que o usuário digitou, o navegador não interpreta corretamente o HTML colado.

Solução: evitar que o usuário cole dentro do rich:editor. O procedimento é muito simples. Basta adicionar um evento onSetup no componente através do código abaixo:


onsetup="event.onPaste.add( function(event, e, o) { alert('Não é possível copiar e colar dentro do componente.'); return tinymce.dom.Event.cancel(e); });"

Leia mais