
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.

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.

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" :-) )!

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!