Um formulário sem proteção recolhe spam, e um formulário com uma proteção que não faz nada recolhe o mesmo spam, transmitindo uma sensação de segurança. A verificação de proteção de formulários gratuita responde à primeira metade dessa pergunta: que proteção contra bots entrega a página? Este artigo explica como ler o resultado e onde termina a sua resposta.
O que a verificação faz
Indica-se o endereço de uma página com um formulário. A verificação lê primeiro o robots.txt desse site; se este proibir a obtenção da página, ou não puder ser lido, a verificação termina aí. Caso contrário, obtém apenas essa página, com um nome claro (SilentShieldFormCheck), sem cookies, com no máximo três redirecionamentos e no máximo 1 MB. Depois procura no HTML as marcas de fornecedores conhecidos: endereços de scripts, classes de elementos e nomes de campos. Conhece o Google reCAPTCHA, o hCaptcha, o Cloudflare Turnstile, o Friendly Captcha e o SilentShield. Nada é guardado, nem o endereço nem o resultado.
Os cinco resultados
- Todos os formulários têm uma marca. Em cada formulário encontrado, o HTML contém a marca de um fornecedor conhecido. A proteção está colocada no formulário.
- Só alguns formulários têm uma marca. A lista mostra a quais falta.
- Um script de fornecedor é carregado, mas nenhum formulário tem marca. A página carrega o script de um fornecedor, mas nenhum dos seus formulários contém uma marca. Se o script protege algum formulário, e qual, não é visível sem executar JavaScript.
- Nada detetado no HTML entregue. A página tem formulários, mas nenhuma marca nem script de um fornecedor conhecido.
- Nenhum formulário no HTML entregue. Os formulários podem ser criados por um script no navegador, o que a verificação não vê.
O que a verificação não consegue ver
A verificação lê o HTML que o seu servidor entrega. Não executa JavaScript. Isso tem quatro consequências a ter em conta.
- Um formulário ou widget que um script cria no navegador não existe para a verificação. “Nada detetado” significa, portanto, “nada no HTML entregue”, nunca “desprotegido”.
- Não consegue saber se o servidor verifica a resposta. Um widget no formulário sem verificação no servidor não trava ninguém.
- A proteção que está à frente da página, como uma firewall ou um limite de pedidos, não deixa rasto no HTML.
- As páginas atrás de um início de sessão estão fora do alcance, porque a verificação obtém apenas páginas públicas, sem cookies.
Um exemplo real: a nossa própria página de registo
Quando executámos a verificação na nossa própria página de registo, a primeira versão indicou dois fornecedores cujo script estaria “carregado”. A página não carrega nenhum deles. A causa foram os dados da própria página: uma entrada de menu com o texto “Alternativa ao hCaptcha.” estava num script inline, e a verificação tomou a palavra pelo código de um fornecedor. Alterámos a regra para que um script inline só conte quando chama um fornecedor (uma chamada de render ou execute), e a mesma página indica agora que nada foi detetado no HTML entregue. A lição é a razão pela qual a verificação só refere factos: uma palavra numa página não é um fornecedor.
O que fazer com o resultado
- Se existir uma marca, teste a outra metade: envie o formulário a partir do exterior sem resposta ou com uma resposta errada e veja se o servidor o rejeita. Uma marca apenas mostra que um widget está colocado.
- Se um script de fornecedor for carregado sem marca no formulário, verifique como o widget é associado. Muitas configurações adicionam-no no navegador depois de a página ser carregada.
- Se nada foi detetado, não conclua que o formulário está aberto. Consulte os registos do servidor e o que realmente chega, e verifique se a proteção corre no servidor ou à frente da página.
- Se decidir substituir um desafio visível, compare as opções na página de comparação de CAPTCHA e veja o que um desafio visível lhe custa com a calculadora de conversão.
A verificação é um primeiro olhar sobre o HTML entregue, não uma auditoria. Use-a para saber o que a sua página diz sobre si própria e teste o resto ao enviar o formulário.