Alternativa ao CAPTCHA

Escrita · 30 jul 2022

Alternativa ao CAPTCHA

Protege os teus formulários de uma forma amiga do utilizador

É provável que já tenhas encontrado um CAPTCHA por aí: protegem os formulários web pedindo-te que escrevas caracteres desenhados de forma estranha ou que seleciones fotografias que contêm determinada coisa. Porque é que são usados e existe uma alternativa amiga do utilizador?

O que é um CAPTCHA?

Pensados para distinguir computadores de humanos, os CAPTCHA exigem muitas vezes que faças algo que um computador não consegue fazer facilmente. Daí a sigla: Completely Automated Public Turing test to tell Computers and Humans Apart. Quem constrói sites usa CAPTCHA para proteger os formulários web contra spam e abusos automatizados.

CAPTCHA típicos que podes encontrar na web (créditos das imagens: Wikipedia e Google)
CAPTCHA típicos que podes encontrar na web (créditos das imagens: Wikipedia e Google)

Porque é que precisas de proteger um formulário?

Um formulário web típico funciona em dois passos:

  • introduzir informação: Preenches alguns dados e clicas em "ENVIAR" (ou algo semelhante) para continuar.
  • processar informação: A informação que introduziste é processada por um servidor, que possivelmente reencaminha a tua mensagem ou pedido para o e-mail de alguém.
Um formulário web típico: o servidor processa a informação de uma pessoa e reencaminha-a para outras pessoas, como tu. Pessoas mal-intencionadas podem facilmente falsificar o remetente, permitindo o abuso automatizado do teu servidor de processamento
Um formulário web típico: o servidor processa a informação de uma pessoa e reencaminha-a para outras pessoas, como tu. Pessoas mal-intencionadas podem facilmente falsificar o remetente, permitindo o abuso automatizado do teu servidor de processamento

O problema desta abordagem típica é que o primeiro passo pode ser facilmente automatizado por pessoas mal-intencionadas. Usam outro computador para enviar informação ao servidor vezes sem conta, obrigando-o a processar montes de dados, muitas vezes mensagens de spam. Os hackers andam sobretudo à procura de formulários web onde possam manipular o endereço "PARA", porque assim podem usar o teu servidor para enviar spam a qualquer pessoa no mundo.

Um CAPTCHA protege o teu formulário impedindo que um computador envie informação ao teu servidor de forma automática.

Problemas do CAPTCHA

Sinceramente, acho-os feios e incómodos, e não estou sozinho nisto. Criam um obstáculo para as pessoas: baixam as taxas de conversão, as taxas de cliques, etc. Além disso, são muitas vezes muito pouco amigáveis para pessoas com problemas de visão.

Os críticos queixam-se também de a Google ser um dos fornecedores mais populares de testes CAPTCHA gratuitos. Podes perguntar-te porque é que oferecem este serviço de graça? É uma excelente forma de entrarem no circuito de muitos percursos de clientes (comerciais), alimentando os seus algoritmos com mais dados para traçar perfis de pessoas. É algo a ter em conta se valorizas a privacidade e as leis do RGPD/cookies.

Alternativa

Por isso decidi criar uma alternativa eficaz ao CAPTCHA para usar nos formulários web que construo para os meus clientes. A minha abordagem tem duas partes:

  • esconder: a maioria das pessoas mal-intencionadas procura alvos à procura de qualquer etiqueta FORM, muito usada para construir formulários web. Os meus formulários não têm a etiqueta FORM, mas usam outros elementos comuns, como DIV: um camuflado perfeito. Se não o conseguem encontrar, não o conseguem quebrar.
  • reforçar: os meus formulários web usam um passo adicional para tornar o seu abuso mais difícil de automatizar. Chamo-lhe "comprar um selo" antes de enviar.

Assinatura criptográfica antes do envio: o selo

Tens de perceber que as pessoas mal-intencionadas pensam de forma económica: só fazem um esforço se o ganho potencial compensar. Se lhes tornares o abuso do teu formulário suficientemente difícil, é provável que sigam para outra e deem o assunto por encerrado. Antes de explicar o que fiz, tenho de avisar:

Aviso: Tens de ponderar o objetivo da proteção do teu formulário. No meu caso, é reduzir (muito) o número de mensagens de spam, preservando a facilidade de utilização. Isto permite-me pensar num sistema que não oferece necessariamente proteção "à prova de bomba", mas se estás a tentar proteger segredos nucleares, esta abordagem pode não servir. Pensa sempre no teu modelo de ameaças!

Para proteger formulários web, introduzo um passo extra a que chamei "comprar um selo". Os passos do formulário protegido ficam então assim:

  • introduzir informação: Preenches alguns dados e clicas em "ENVIAR" (ou algo semelhante) para continuar.
  • obter o selo: Mesmo antes de a informação ser realmente enviada, o teu dispositivo contacta o servidor para pedir um token criptográfico que corresponde às características da informação e do remetente. Isto acontece em meros milissegundos, ninguém dá por isso. Pensa no token como um selo postal, específico para o pacote que estás a enviar, a usar uma única vez.
  • processar informação: A informação que introduziste é combinada com o token criptográfico e enviada ao servidor. Se o token for válido, a informação é processada como habitual. Os tokens inválidos são simplesmente ignorados, o que é importante para tornar a engenharia inversa muito difícil, ao não dar qualquer resposta (o servidor diz sempre "OK" :-) )!
Ao introduzir um token único, de uso único, para cada mensagem, torna-se muito mais difícil para pessoas mal-intencionadas automatizar o envio de mensagens, protegendo o teu formulário contra spammers
Ao introduzir um token único, de uso único, para cada mensagem, torna-se muito mais difícil para pessoas mal-intencionadas automatizar o envio de mensagens, protegendo o teu formulário contra spammers

Desde 2016 que uso esta abordagem e os servidores de processamento já trataram literalmente milhões de mensagens, com muito poucas (<100) de spam. Olhando com atenção, a maior parte do spam que passa é "trabalho manual": possivelmente pessoas mal-intencionadas a investigar o mecanismo. Como parece ser demasiado esforço quebrar o sistema, é muito eficaz para o meu objetivo de proteger os formulários web.

Conclusão

Embora os CAPTCHA sejam compreensivelmente muito populares, nem sempre é necessário tê-los nos teus formulários web se considerares alternativas. O meu conselho: torna a vida mais difícil a quem tem más intenções e mais fácil ao teu público!

← Mais textos