Eu tenho um formulário de e-mail do site. Eu uso um CAPTCHA personalizado para evitar spam de robôs. Apesar disso, ainda recebo spam.
Por quê? Como os robôs vencem o CAPTCHA? Eles usam algum tipo de OCR avançado ou simplesmente obtêm a solução de onde estão armazenados?
Como posso evitar isso? Devo mudar para outro tipo de CAPTCHA?
Tenho certeza de que os emails são provenientes do formulário, porque são enviados pelo remetente do email que atende as mensagens do formulário. Além disso, o estilo da letra é o mesmo.
Para o registro, estou usando PHP + MySQL, mas não estou procurando uma solução para esse problema. Eu estava interessado na situação geral de como os robôs vencem essas tecnologias. Eu apenas contei essa situação como exemplo, para que você possa entender melhor o que estou perguntando.
Respostas:
Duas maneiras mais fáceis de passar pelo CAPTCHA:
Use fazendas humanas, ou seja, peça às pessoas para preencher CAPTCHAs por dinheiro, assim como os ProTypers .
Use um OCR.
Também pode haver um bug no mecanismo CAPTCHA ou no aplicativo circundante, permitindo que alguém ignore o CAPTCHA.
A propósito, o artigo W3C Inacessibilidade do CAPTCHA: Alternativas aos Testes de Visual Turing na Web explica também como os CAPTCHAs podem ser comprometidos:
Então, como você pode impedir esses ataques?
Se você possui seu CAPTCHA implementado personalizado, tente mudar para um popular, como o reCAPTCHA .
Isso ajudará se o seu próprio CAPTCHA for muito fácil para OCR ou se houver um erro que foi explorado com êxito.
Se você usar um mecanismo CAPTCHA popular, mudar para um mecanismo customizado ou outro popular pode impedir o OCR.
Tecnicamente, nada impediria farms humanos: você pode criar GIFs animados em que vários quadros exibem texto diferente muito rapidamente, e apenas um quadro é realmente visível pelo usuário, você pode distorcer ou dobrar o texto em todas as direções ou encontrar novas formas alternativas de evitar OCRs por reconhecerem texto, ainda humanos pagos pela solução de CAPTCHAs os resolverão com sucesso.
Você pode passar do CAPTCHA visual para o som (se você já não estiver usando os dois, e deveria), mas isso significa que os usuários com deficiência auditiva não conseguiriam usar o aplicativo.
FrustratedWithFormsDesigner e GalacticCowboy mencionados nos comentários CAPTCHAs específicos do domínio. Eu tentei encontrar algum material sobre o quão eficaz isso é, mas sem sucesso, então aqui está apenas minha opinião pessoal:
Os CAPTCHAs específicos do domínio podem ser extremamente irritantes quando usuários reais não têm idéia da resposta.
Exemplo: estou visitando uma página em um site orientado a filmes. Percebo um erro em um artigo e quero comentar sobre ele para notificar o autor sobre o erro. O formulário de comentários me pede, como mecanismo CAPTCHAs, para fornecer o nome da atriz exibida em uma foto. Eu não tenho idéia de quem é essa atriz, então a única coisa que posso fazer é deixar o site (ou passar os próximos dois minutos usando o Google Imagens).
Outro exemplo: um site pede para dar um sinônimo de "misterioso". Por mais fácil que pareça para uma pessoa não deficiente que fala inglês fluentemente, seria impossível resolver sem ajuda externa para pessoas que não falam bem o inglês ou pessoas com alguma deficiência no desenvolvimento, sem contar o fato de que encontrar sinônimos ou antônimos é sempre complicado.
A maioria desses problemas específicos de domínio pode ser resolvida programaticamente. Os dois exemplos que dei são facilmente resolvidos usando recursos externos (Google Images e dicionário de sinônimos). Aquele sobre transistores, dado como exemplo pelo FrustratedWithFormsDesigner, é melhor, mas ainda pode ser resolvido com um bot personalizado.
Ninguém resiste a fazendas humanas.
Eles geram dados, assim como os CAPTCHAs de texto comum desenham caracteres distorcidos; nesse caso, o algoritmo de geração pode ser explorado para ajustar os bots, ou eles encontram dados em algum lugar, assim como o reCAPTCHA pega o texto dos livros digitalizados , e nesse caso o bot pode use esses dados contra ele (por exemplo, se você usar palavras de um dicionário, solicitando ao usuário que forneça sinônimos, o bot poderá usar o mesmo dicionário para obter 100% de sucesso).
fonte
Adicionando à resposta do MainMa ...
Os spammers induzem os outros a fazer o CAPTCHA por eles
Basicamente, os spammers criam um site warez ou pornô que parece ter um CAPTCHA, mas não é um CAPTCHA real. Um bot puxa o CAPTCHA do site que deseja spam (ou, de outra forma, explora) e o exibe no site warez ou em um site pornô em que alguém o completa. Em seguida, o valor CAPTCHA é passado de volta ao bot ...
Um pouco mais sobre spammers
Eu uso o reCAPTCHA e descobri que é basicamente inútil. Também uso um filtro de spam personalizado que captura o spam que passou pelo reCAPTCHA e preciso analisá-lo a cada poucos dias para detectar falsos positivos.
Meu fórum também é totalmente personalizado e recebe muito pouco tráfego. Não acredito que alguém tenha codificado um ataque específico ao meu site. Ainda assim, meu filtro de spam captura 2k mensagens de spam por dia! Nenhum é exibido no site. Os spammers não se beneficiam de me enviar spam, mas ainda assim o fazem.
Consigo ver padrões nas tentativas de envio de spam porque registro tudo. Posso lhe dizer isso: deixando de lado como eles ultrapassam o CAPTCHA, os spammers estão claramente usando uma técnica de força bruta que varia os campos que são preenchidos e o tipo de dados e combinações de palavras que preenchem esses campos. Aparentemente, eles fazem isso tão barato (incluindo ignorar o CAPTCHA) que nem vale a pena fazer uma análise dos sites individuais para ver se o que eles estão fazendo está ou não funcionando.
Ano após ano, eles continuam segmentando meu site com milhares de mensagens de spam por dia apenas para receber uma a cada mês, e essa é excluída manualmente um dia depois. É tão barato para spam!
Essa será uma batalha nos próximos anos. Especialmente para sites moderadores pequenos como o meu.
EDIT 22/6/2017 : Quero acrescentar que, desde este post, o Google reformulou completamente o reCAPTCHA e, até o momento em que este artigo foi escrito, vinha funcionando perfeitamente. Embora eu suspeite que exista um pouco de falsos positivos ou que seja doloroso para os usuários, pois o post caiu um pouco desde que eu o implementei. As 2 grandes mudanças são
1) Eles estão usando imagens em vez de texto (então não há mais OCR)
2) Eles a combinam com a atividade dos usuários em todo o site que usa o reCAPTCHA. Portanto, se você passar pelo reCAPTCHA no site A, vá para o Site B, talvez nem seja necessário que você prove que é humano! Além disso (eu acho), se você estiver atingindo muitos reCAPTCHAs em muitos sites, isso também será sinalizado. Tenho certeza de que ele está usando outros tipos de IA com base na atividade dos usuários.
Tenho certeza de que é apenas uma questão de tempo até que os spammers superem isso também ...
fonte
Alguma vez você já tentou usar captcha gato-cachorro? Eu tenho um fórum que tinha captcha padrão e mudou e não tenho spam de convidados desde então.
fonte
É possível que seu site esteja sendo direcionado por uma força de trabalho explorada e barata e que um ser humano esteja inserindo manualmente suas frases CAPTCHA.
Se a solução que você está usando não for muito sofisticada, é possível que o invasor esteja reconhecendo a imagem.
Também é possível que você tenha um bug em algum lugar do código que permita que o CAPTCHA seja ignorado.
Não assuma que um robô está batendo no seu CAPTCHA. Pense no seu sistema de forma holística e veja se ele foi comprometido.
fonte
Outros discutiram como os spammers contornam os CAPTCHAs. Aqui estão algumas dicas sobre como evitar isso :
Observe que não há bala de prata e os spammers parecem estar um passo à frente do jogo. Então você terá que usar uma combinação de várias técnicas
fonte
Para ecoar as outras respostas, é provável que você encontre bots que usam fazendas humanas para inserir os captchas para eles.
Recentemente, discuti uma técnica (e lançou um módulo Drupal que o acompanha) que bloqueia os bots de spam exigindo JavaScript do lado do cliente. Tanto quanto sei, isso funcionou com 100% de eficiência em todos os sites que usaram esse código. A idéia é usar o AJAX para gerar um hash exclusivo e enviá-lo junto com os outros dados do formulário. Depois, calcule o mesmo hash no back-end após o envio do formulário e compare os dois valores.
Detalhes completos no meu blog (coincidentemente, desde que você mencionou o uso do PHP + MySQL, estas são as mesmas tecnologias descritas lá) - Versão do módulo: Badbot; eliminando spam ...
fonte
Se o seu site é twitter e alguém o segmentou especificamente (em vez de um bot o encontrar), você pode parar de ler ...
Caso contrário, pode valer a pena não fazer com que seu formulário NÃO pareça um formulário. 1. Não tenha campos com 'email' no tipo, nome ou espaço reservado, use nomes curtos ou enganosos para todos os campos. 2. Não use um elemento de formulário html real e o botão enviar. Em vez disso, use o AJAX para publicá-lo com o clique de uma div normal (estilizada para se parecer com um botão). 3. Não coloque o evento onclick no html, adicione um ouvinte em JavaScript. 4. Use JavaScript para preencher todas as dicas 'digite seu endereço de email aqui', pois é possível que os bots não atinjam o JS ao arrastar páginas (não tenho certeza sobre isso, mas eu faço mesmo assim).
fonte