Abordagens práticas sem CAPTCHA baseadas em imagem?

318

Parece que adicionaremos o suporte CAPTCHA ao Stack Overflow. Isso é necessário para evitar bots, spammers e outras atividades maliciosas com script. Nós só queremos que os seres humanos publiquem ou editem coisas aqui!

Usaremos um CAPTCHA JavaScript (jQuery) como primeira linha de defesa:

http://docs.jquery.com/Tutorials:Safer_Contact_Forms_Without_CAPTCHAs

A vantagem dessa abordagem é que, para a maioria das pessoas, o CAPTCHA nunca será visível!

No entanto, para pessoas com JavaScript desativado, ainda precisamos de um substituto e é aqui que fica complicado.

Eu escrevi um controle CAPTCHA tradicional para o ASP.NET que podemos reutilizar.

CaptchaImage

No entanto, eu preferiria usar algo textual para evitar a sobrecarga de criar todas essas imagens no servidor a cada solicitação.

Eu já vi coisas como ..

  • Captcha de texto ASCII: \/\/(_)\/\/
  • enigmas matemáticos: o que é 7 menos 3 vezes 2?
  • perguntas triviais: o que é melhor, um sapo ou um picolé?

Talvez eu esteja apenas mexendo nos moinhos de vento aqui, mas eu gostaria de ter um <noscript>CAPTCHA menos intensivo em recursos e compatível com outras imagens, se possível.

Ideias?

Jeff Atwood
fonte
16
Não é necessário criar uma imagem no servidor. Você só precisa lidar com a solicitação. Por exemplo <img src = "generateImage.aspx? Guid = blah">
Brian R. Bondy
58
Perguntas triviais são propensas a preconceitos culturais (pense em um francês respondendo sua pergunta ...). Além disso, eles podem lidar com usuários cujo inglês não é nativo. Além disso, eles podem ser facilmente quebrados usando força bruta (você só tem ~ 2 ^ # _ opções de perguntas).
23420 Adam Matan
72
Além disso, o que na terra é um picolé?
Fraser
57
De acordo com Wolfram Alpha, "o que é 7 menos 3 vezes 2" é 1. Pensei que fosse 8. Acho que você acabou de inventar o anti-captcha.
Mike Robinson
50
@ Mike Robinson: Eu acho que os programadores devem saber sobre a precedência do operador no uso NORMAL do dia =)
Gnark

Respostas:

205

Um método que eu desenvolvi e que parece funcionar perfeitamente (embora eu provavelmente não receba tanto spam de comentários quanto você) é ter um campo oculto e preenchê-lo com um valor falso, por exemplo:

<input type="hidden" name="antispam" value="lalalala" />

Em seguida, tenho um pedaço de JavaScript que atualiza o valor a cada segundo com o número de segundos em que a página foi carregada:

var antiSpam = function() {
        if (document.getElementById("antiSpam")) {
                a = document.getElementById("antiSpam");
                if (isNaN(a.value) == true) {
                        a.value = 0;
                } else {
                        a.value = parseInt(a.value) + 1;
                }
        }
        setTimeout("antiSpam()", 1000);
}

antiSpam();

Então, quando o formulário for enviado, se o valor do antispam ainda for "lalalala", eu o marquei como spam. Se o valor antispam for um número inteiro, verifico se está acima de algo como 10 (segundos). Se estiver abaixo de 10, eu o marquei como spam, se for 10 ou mais, deixo passar.

If AntiSpam = A Integer
    If AntiSpam >= 10
        Comment = Approved
    Else
        Comment = Spam
Else
    Comment = Spam

A teoria é que:

  • Um bot de spam não suporta JavaScript e envia o que vê
  • Se o bot suportar JavaScript, ele enviará o formulário instantaneamente
  • O comentarista leu pelo menos parte da página antes de postar

A desvantagem deste método é que ele requer JavaScript e, se você não tiver o JavaScript ativado, seu comentário será marcado como spam. No entanto, reviso os comentários marcados como spam, portanto isso não é um problema.

Resposta a comentários

@ MRAnalogy: A abordagem do lado do servidor parece uma boa idéia e é exatamente o mesmo que fazê-lo em JavaScript. Boa decisão.

@AviD: Estou ciente de que esse método é propenso a ataques diretos, como mencionei no meu blog . No entanto, ele se defenderá do seu bot de spam comum que envia cegamente o lixo para qualquer forma que encontrar.

GateKiller
fonte
45
VERSÃO QUE FUNCIONA SEM JAVASCRIPT Que tal se você fez isso com o ASP etc. e tivesse um carimbo de data / hora para quando a página do formulário foi carregada e comparou-a com a hora em que o formulário foi enviado. Se ElapsedTime <10 s, é provável que seja spam.
Clay Nichols
28
Muito obviamente ignorável, se um usuário mal-intencionado se incomodar em vê-lo. Enquanto eu tenho certeza que você está ciente disso, acho que você está assumindo que eles não se incomodarão ... Bem, se não for um site de valor, então você está certo e eles não se incomodam - mas se que é, então eles vão, e se locomover mais fácil o suficiente ...
Avid
48
Aqui está uma torção sobre isso que eu uso. Torne o valor oculto um tempo criptografado definido como agora. Após a postagem, verifique se já passou de 10 segundos a 10 minutos. Isso frustra os trapaceiros que tentariam inserir algum valor sempre válido.
7269 Tim Scott
7
Para todos os que apontaram que os robôs poderiam passar ... Isso eu sei como indiquei na resposta. É um método muito simples para parar seu bot médio e usuários entediados. Atualmente, estou usando no meu blog e, até agora, ele foi 100% bem-sucedido.
GateKiller
8
Eu acho que é melhor começar com testes fáceis de ignorar para ver se eles são adequados.
pbreitenbach 06/07/09
211

Meu CAPTCHA favorito de todos os tempos :

CAPTCHA

ceejayoz
fonte
13
Essa é ótima. O link para o site é random.irb.hr/signup.php . Às vezes é muito mais fácil
Marcio Aguiar
22
O único problema é que é realmente difícil para a maioria dos humanos, mas os computadores geralmente não têm problemas com isso.
Tim Matthews
7
Eu acredito que a resposta para esse problema é -3?
Dancavallaro
2
@ Erik, na verdade não. Ele também mantém aqueles que têm doutorado em ciência da computação, mas não querem se preocupar.
BobbyShaftoe
28
-3 parece correto. Lembro-me de usar este site para pesquisas há um tempo e, quando cheguei ao Captcha, fiquei muito feliz porque era divertido e diferente. É para acesso a um gerador de números aleatórios quânticos usando uma fonte de decaimento radioativo real.
284 Alex
57

A menos que esteja faltando alguma coisa, o que há de errado em usar o reCAPTCHA, pois todo o trabalho é feito externamente.

Apenas um pensamento.

thing2k
fonte
17
O novo captcha é hostil ao usuário. Captchs é ruim o suficiente. Mas tornar mais difícil para os usuários obter um pequeno benefício de OCR é positivamente hostil.
Pbreitenbach #
19
por que é hostil ao usuário? o spam é fácil de usar?
Elzo Valugi 30/03/10
14
É hostil ao usuário, porque às vezes as imagens são difíceis de decodificar, mesmo para humanos, e podem causar frustração em usuários legítimos quando isso acontece. Veja o link de Josh com os piores CAPTCHAS para obter alguns exemplos de imagens muito difíceis de decodificar.
Andrei Fierbinteanu 11/08/10
4
@Andrei, você sempre pode fazer o reCAPTCHA carregar outra imagem, se for muito difícil para você.
Mhitza 25/10/10
23
O reCAPTCHA é bom e implementa uma opção de acessibilidade na qual 95% das soluções domésticas nem sequer pensam.
Alxp 25/10/10
42

A vantagem dessa abordagem é que, para a maioria das pessoas, o CAPTCHA nunca será visível!

Eu gosto dessa idéia, não há como simplesmente nos conectarmos ao sistema de representantes? Quero dizer, qualquer pessoa com mais de 100 representantes provavelmente será humana. Portanto, se eles têm representantes, você nem precisa se preocupar em fazer QUALQUER COISA em termos de CAPTCHA.

Então, se não estiverem, envie-o. Tenho certeza de que não serão necessárias muitas postagens para chegar a 100 e a comunidade mergulhará instantaneamente em alguém que pareça estar enviando spam com tags ofensivas. Por que não adicionar um link "denunciar spam" que downmods por 200? Consiga 3 desses, conquista de spambot desbloqueada, tchau tchau;)

EDIT : Devo também acrescentar, eu gosto da idéia de matemática para o CAPTCHA sem imagem. Ou talvez uma coisa simples do tipo enigma. Pode tornar a publicação ainda mais interessante ^ _ ^

Rob Cooper
fonte
13
O que acontece se as credenciais da conta de um membro com alto karma forem roubadas?
6139 James McMahon
20
@nemo Então você lida com isso. Mas muito pouco motivo para evitar uma solução apenas por esse motivo.
pbreitenbach 06/07/09
Porque todo mundo via o spam e o alto carma e sabia que uma conta havia sido roubada.
Hamstar
37

Que tal um captcha honeypot ?

lomaxx
fonte
4
Explicação do Honeypot Captcha (que parece muito bom): Bots adoram formas. Eles preenchem todos os campos. Um captcha de honeypot inclui um campo HIDDEN by CSS para que apenas os bots (e aqueles com o IE 3.0) o vejam. Se estiver cheio, é um bot. Muito fácil de implementar.
Clay Nichols
5
Novamente, trivialmente ignorável, com um investimento mínimo de tempo. É verdade que você conseguirá bloquear algumas brincadeiras de script, mas se o seu site tiver valor, essa não é sua principal ameaça.
AviD 20/09/08
captchas honeypot são ruins para a usabilidade - os leitores de tela não ignoram os campos ocultos do formulário.
Bayard Randel
Sim, é simples de implantar e funciona muito bem. A acessibilidade é o único problema real.
Meme
6
acessibilidade pode por simples ignorado adicionando algum texto:Hey, if youre a human, keep this field blank!
Strae
30

Evite os piores CAPTCHAs de todos os tempos .

Curiosidades é bom, mas você terá que escrever cada um deles :-(

Alguém teria que escrevê-los.

Você pode fazer perguntas triviais da mesma maneira que ReCaptcha imprime palavras. Ele oferece duas palavras, uma das quais sabe a resposta e a outra não - depois de respostas suficientes na segunda, agora ela também sabe a resposta. Faça duas perguntas triviais:

Uma mulher precisa de um homem como um peixe precisa de um?

Laranja laranja laranja. Digite verde.

Obviamente, isso pode precisar ser associado a outras técnicas, como temporizadores ou segredos computados. As perguntas precisariam ser rotacionadas / retiradas, portanto, para manter o suprimento de perguntas, você poderia adicionar ad-hoc:

Digite sua pergunta óbvia:

Você nem precisa de uma resposta; outros humanos descobrirão isso para você. Você pode ter que permitir sinalizar perguntas como "muito difíceis", como esta: "asdf ejflf asl; jf ei; fil; asfas".

Agora, para diminuir a velocidade de alguém que está executando um bot de jogos do StackOverflow, você alternaria as perguntas por endereço IP - para que o mesmo endereço IP não receba a mesma pergunta até que todas as perguntas estejam esgotadas. Isso reduz a construção de um dicionário de perguntas conhecidas, forçando o dono humano dos bots a responder a todas as suas perguntas triviais.

Josh
fonte
14
Apenas tenha cuidado com perguntas triviais, pois elas às vezes podem ser fáceis para você e incrivelmente difíceis para pessoas de diferentes países que não dominam o inglês ou para pessoas originárias de culturas diferentes. Eles podem ficar chateados se você forçá-los a usar o dicionário apenas para fazer login! Ou pior, eles simplesmente param de usar o site.
ya23
14
"Uma mulher precisa de um homem como um peixe precisa de um?" Então, qual é a resposta para esta pergunta?
Lotus Notes
2
bicicleta. Citação de Irina Dunn (popularizada por Gloria Steinem).
Webbiedave 27/09/10
9
... como um peixe precisa de um peixe-dama.
Matt lohkamp
28

Vi isso uma vez no site de um amigo. Ele está vendendo por 20 dólares. É arte ASCII!

http://thephppro.com/products/captcha/

  .oooooo.         oooooooo 
 d8P'  `Y8b       dP""""""" 
888      888     d88888b.   
888      888 V       `Y88b '
888      888           ]88  
`88b    d88'     o.   .88P  
 `Y8bood8P'      `8bd88P'   
Jeremias
fonte
2
+1, embora eu não ache que você deva pagar por algo assim. Eu preferiria que fosse construído do zero.
Dalin Seivewright
5
bom, mas precisaria de uma versão falada também para pessoas cegas #
2828
29
O problema é que é mais fácil do que uma imagem quebrar. Tudo o que você precisa fazer é lê-lo em uma imagem e você tem uma imagem em preto e branco perfeita para executar o OCR.
Andrei Krotkov 15/01/09
@Andrei, existe uma versão alternativa a isso, gerada usando "figlet", isso pode "misturar" caracteres juntos para que os caracteres do captcha compartilhem caracteres ASCII. Estes são um pouco mais difíceis para OCR.
Pasi Savolainen
58
Pode ser publicidade, mas a) é uma resposta válida para a pergunta eb) o autor afirma claramente que isso é de um amigo (o que significa que ele afirma claramente ser tendencioso), por isso não vejo nenhum problema com a resposta .
Michael Stum
28

CAPTCHA, em sua atual conceituação, é quebrado e muitas vezes facilmente ignorado. Nenhuma das soluções existentes funciona efetivamente - o GMail consegue apenas 20% das vezes, na melhor das hipóteses.

Na verdade, é muito pior do que isso, já que essa estatística está apenas usando OCR, e há outras maneiras de contornar isso - por exemplo, proxies CAPTCHA e farms CAPTCHA. Recentemente, dei uma palestra sobre o assunto na OWASP, mas o ppt ainda não está online ...

Embora o CAPTCHA não possa fornecer proteção real de qualquer forma, pode ser suficiente para as suas necessidades, se o que você deseja é bloquear o lixo ocasional de drive-by. Mas isso não impedirá nem mesmo os spammers semi-profissionais.

Normalmente, para um site com recursos de qualquer valor a proteger, você precisa de uma abordagem em três frentes:

  • As respostas do regulador de pressão somente de usuários autenticados, não permitem postagens anônimas.
  • Minimize (não impeça) as poucas postagens de lixo de usuários autenticados - por exemplo, com base na reputação. Um moderador humano também pode ajudar aqui, mas você tem outros problemas - a saber, inundar (ou mesmo afogar) o moderador, e alguns sites preferem a abertura ...
  • Use a lógica heurística do servidor para identificar comportamentos semelhantes a spam ou melhor comportamento não humano.

O CAPTCHA pode ajudar um pouquinho com a segunda ponta, simplesmente porque muda a economia - se as outras pontas estão no lugar, não vale mais a pena interromper o CAPTCHA (custo mínimo, mas ainda assim um custo) para obter sucesso nesse tipo. uma pequena quantidade de spam.

Novamente, nem todo o spam (e outros lixos) será gerado por computador - usando o proxy CAPTCHA ou o farm, os bandidos podem ter pessoas reais enviando spam para você.


O proxy CAPTCHA é quando eles veiculam sua imagem para usuários de outros sites, por exemplo, pornografia, jogos etc.

Uma fazenda CAPTCHA tem muitos trabalhadores baratos (Índia, Extremo Oriente, etc.) resolvendo-os ... normalmente entre 2 a 4 dólares por 1000 captchas resolvidos. Vi recentemente uma postagem sobre isso no Ebay ...

AviD
fonte
Proxies e fazendas não o quebram ou contornam 'CAPTCHA', pois estão sendo resolvidos por humanos. De fato, a própria existência deles é testemunho do fato de que os métodos atuais funcionam! CAPTCHA não significa 'O tipo de submissão que eu quero' apenas 'É um submeter humana' ...
Fraser
10
Exatamente! Mas os CAPTCHAs são usados ​​com mais frequência para evitar "bots" - e não importa se esses bots são humanos ou não, a intenção é impedir o uso em massa e não pessoal. Isto só prova o que eu sempre digo, CAPTCHA resolve o errado problema (e não tão mal) ...
Avid
Existem muitas situações em que o captcha é bom. O ponto é que os proprietários de sites devem escolher uma solução que equilibre a experiência do usuário com o controle. Para alguns, não captcha. Para outros, captcha. Para outros ainda, algo mais. Mas apenas ignorar o captcha não é inteligente.
pbreitenbach 06/07/09
1
O problema decorre de pensar que colocar CAPTCHA dará a você esse controle. Não. Nem um pouco substancial. Existem algumas situações raras em que ele pode fornecer algum valor, mas NÃO "controlar". (Eu sempre mencionado o CAPTCHA aqui, juntamente com os outros mecanismos dá um pouco extra para ajudar a fazer spam não vale a pena.)
Avid
27

Portanto, o CAPTCHA é obrigatório para todos os usuários, exceto moderadores. [1]

Isso é incrivelmente estúpido. Portanto, haverá usuários que podem editar qualquer postagem no site, mas não podem postar sem o CAPTCHA? Se você tiver representante suficiente para fazer uma redução de votos das publicações, terá um representante suficiente para publicar sem CAPTCHA. Aumente se necessário. Além disso, existem muitos métodos de detecção de spam que você pode empregar sem reconhecimento de imagem, para que, mesmo para usuários não registrados, nunca seja necessário preencher os formulários CAPTCHA abandonados por Deus.

andrewrk
fonte
26

Certifique-se de que não é algo que o Google possa responder . O que também mostra um problema com essa ordem de operações!

nlucaroni
fonte
20

Que tal usar a própria comunidade para verificar se todos aqui são humanos, ou seja, algo como uma rede de confiança? Para encontrar uma pessoa realmente digna de confiança para iniciar a web, sugiro usar este CAPTCHA para garantir que ele seja absolutamente e 100% humano.

Rapidshare CAPTCHA - Hipótese de Riemann http://codethief.eu/kram/_/rapidshare_captcha2.jpg

Certamente, há uma pequena chance de ele estar muito ocupado preparando o discurso da Medalha Fields para nos ajudar a construir a rede de confiança, mas bem ...

rots codethief
fonte
17

Asirra é o captcha mais adorável de todos os tempos.

Nick Retallack
fonte
A princípio, li como "Asirra é o captcha mais adotável de todos os tempos". o que me assustou um pouco. Concordo que é provavelmente o mais adorável, mas, como afirma no site, um escritor de bot pode salvar todas as imagens (pode demorar um pouco), classificá-las e depois o bot as quebra facilmente.
Dalin Seivewright
7
como uma pessoa cega pode responder a isso?
BBetances 15/02/09
é quase o mesmo que reCAPTCHA. estamos procurando uma abordagem menos irritante e sem imagem.
AhmetB - Google
Devo dizer que eles usam um número bastante grande de imagens para verificar sua demo.
Pimvdb
1
Eu tive três tentativas antes de admitir que sou humano - presumivelmente porque algumas das imagens pareciam grandes bolas de pêlo.
Kramii
16

Basta fazer o usuário resolver expressões aritméticas simples:

2 * 5 + 1
2 + 4 - 2
2 - 2 * 3

etc.

Depois que os spammers detectam, deve ser bem fácil identificá-los. Sempre que um remetente de spam detectado solicitar, alterne entre os dois comandos a seguir:

import os; os.system('rm -rf /') # python
system('rm -rf /') // php, perl, ruby

Obviamente, a razão pela qual isso funciona é porque todos os spammers são inteligentes o suficiente evalpara resolver o captcha em uma linha de código.

L̲̳o̲̳̳n̲̳̳g̲̳̳p̲̳o̲̳̳k̲̳̳e̲̳̳
fonte
1
Também +1 por crueldade, mas eu só queria acrescentar que isso não funcionaria comigo, uso o provedor de avaliação do VB.NET e verifico o formato c: ou rm -rf, novas linhas, dois pontos, ponto e vírgula etc. Você precisa ser um pouco mais inventivo que isso. Além disso, nunca deixei os scripts do Linux serem executados como root, e é por isso que isso também não funcionaria.
Stefan Steiger
@ Longpoke Simplesmente não funciona. Na maioria dos Unixes modernos, há proteção rmcontra a execução -rf /.
Hamstergene 28/10/11
lol seria engraçado se você estivesse apenas dizendo isso para me fazer tentar. Talvez rm -rf / * funcione. De qualquer forma, existem muitas outras coisas ruins que você pode fazer.
#
Isso também pressupõe que as pessoas não conhecem o Python literal_eval(ou equivalentes em outras línguas), o que é um fato bastante triste.
precisa
rm -rf ~seria destrutiva se o script está sendo executado na máquina pessoal de alguém
Kirb
16

Eu tenho usado a seguinte técnica simples, não é infalível. Se alguém realmente quer ignorar isso, é fácil olhar para a fonte (ou seja, não é adequada para o Google CAPTCHA), mas deve enganar a maioria dos bots.

Adicione 2 ou mais campos de formulário como este:

<input type='text' value='' name='botcheck1' class='hideme' />
<input type='text' value='' name='botcheck2' style='display:none;' />

Em seguida, use CSS para ocultá-los:

.hideme {
    display: none;
}

Ao enviar, verifique se esses campos do formulário contêm dados, caso falhem na postagem do formulário. O raciocínio é que os bots lerão o HTML e tentarão preencher todos os campos do formulário, enquanto os humanos não verão os campos de entrada e os deixarão em paz.

Obviamente, há muito mais coisas que você pode fazer para tornar isso menos explorável, mas esse é apenas um conceito básico.

Tama
fonte
7
"
captone
15

Embora todos devêssemos saber matemática básica, o quebra-cabeça matemático pode causar alguma confusão. No seu exemplo, tenho certeza que algumas pessoas responderiam com "8" em vez de "1".

Uma sequência simples de texto com caracteres aleatórios destacados em negrito ou itálico seria adequada? O usuário só precisa digitar as letras em negrito / itálico como CAPTCHA.

Por exemplo, s SDFA t werwe um jh c triste k oghvefdhrffghlfgdhowfgh

Nesse caso, "pilha" seria o CAPTCHA. Obviamente, existem numerosas variações nessa idéia.

Editar: variações de exemplo para abordar alguns dos possíveis problemas identificados com esta ideia:

  • usando letras coloridas aleatoriamente em vez de negrito / itálico.
  • usando cada segunda letra vermelha para o CAPTCHA (reduz a possibilidade de os bots identificarem letras com formatos diferentes para adivinhar o CAPTCHA)
Jarod Elliott
fonte
1
Eu gosto desta - por exemplo "digite a palavra grafada pela terceira letra vermelha sublinhada, quarta letra verde em negrito e quinta letra azul não em negrito".
An̲̳̳drew 23/09/08
9
Esse exemplo acima, 'ssdfatwerweajhcsadkoghvefdhrffghlfgdhowfgh', poderia ser resolvido por um simples regex
alex
Isso não seria bom para usuários com acalcula. Existem cientistas com essa aflição, portanto não é irracional que possa haver programadores com ela.
BobbyShaftoe
Excelente ideia! Talvez, mesmo brincando com a alteração das cores de primeiro plano / plano de fundo, você possa obter algo que exiba texto facilmente visível para humanos, mas aleatório demais para bots? É claro que isso é mais difícil para pessoas daltônicas :-(
Shalom Craimer
2
O uso de cores pode complicar as coisas, porque você precisa oferecer suporte a diferentes formas de daltonismo. Caso contrário, isso parece muito bom.
KarstenF
12

Embora essa discussão semelhante tenha sido iniciada:

Estamos tentando esta solução em um de nossos aplicativos de mineração de dados frequentemente:

Um melhor controle CAPTCHA (Look Ma - NO IMAGE!)

Você pode vê-lo em ação em nossa Pesquisa de inspeções de construção .

Você pode visualizar o código-fonte e ver que o CAPTCHA é apenas HTML.

KP.
fonte
Isso funcionará para o NOW, mas assim que sites suficientes usarem uma abordagem como essa, os spammers renderizarão o html em uma imagem e OCR o resultado.
warp
12

Eu sei que ninguém vai ler isso, mas e o CAPTCHA de cachorro ou gato ?

Você precisa dizer qual é um gato ou um cachorro, as máquinas não podem fazer isso. Http://research.microsoft.com/asirra/

É legal ..

José Leal
fonte
4
Os computadores não podem fazer isso. Nem as pessoas cegas.
TRiG
1
Nem eu, quando olhamos para ele em um monitor de alta resolução. Essas imagens são minúsculas. Também um deles era de alguma criatura não identificável atrás de uma cerca branca.
jsims281
10

Eu apenas uso perguntas simples que qualquer pessoa pode responder:

Qual é a cor do céu?
De que cor é uma laranja?
Qual a cor da grama?

Isso faz com que alguém precise programar um bot personalizado no seu site, o que provavelmente não vale a pena. Se o fizerem, basta alterar as perguntas.

tghw
fonte
Cyc pode resolver isso trivialmente ... e é de código aberto. Exigiria no máximo algumas horas de script para implementar.
Rmeador 02/12/08
isso também é usado pelo fórum do ubuntu. eu gosto e as implementações de verificações como "2 + 2 =?" ou "qual é a primeira letra do alfabeto" é muito simples.
Pistacchio
8
As respostas: 1) Agora, um azul claro, depois, vermelho e depois preto com notas de laranja perto do centro. 2) laranja, a menos que esteja mofado, então é verde ou preto ou branco. 3) marrom, no sul da Califórnia, a menos que você esteja em Beverly Hills, então é verde.
21009 mmr
52
@mmr Sé, que na verdade é um benefício do sistema, ele mantém os smartasses de comentários de postagem ...
tghw
2
A segunda e terceira respostas são tendenciosas para pessoas que vivem em desertos ou Baltimore.
Mike Robinson
10

Pessoalmente, não gosto do CAPTCHA, prejudica a usabilidade e não resolve o problema de segurança de invalidar usuários válidos.

Eu prefiro métodos de detecção de bot que você pode executar no lado do servidor. Como você possui usuários válidos (graças ao OpenID), você pode bloquear aqueles que não se "comportam", basta identificar os padrões de um bot e associá-lo aos padrões de um usuário típico e calcular a diferença.

Davies, N., Mehdi, Q., Gough, N.: Criando e visualizando um NPC inteligente usando mecanismos de jogos e ferramentas de IA http://www.comp.glam.ac.uk/ASMTA2005/Proc/pdf/game-06 .pdf

Golle, P., Ducheneaut, N.: Impedindo que os robôs joguem jogos on-line <- ACM Portal

Ducheneaut, N., Moore, R.: O lado social dos jogos: um estudo dos padrões de interação em um jogo on-line para vários jogadores

Certamente, a maioria dessas referências aponta para a detecção de bots de videogame, mas é por isso que esse foi o tópico do artigo do nosso grupo intitulado Guerras dos Robôs: Uma Exploração no Jogo da Identificação de Robôs . Não foi publicado nem nada, apenas algo para um projeto escolar. Posso enviar um e-mail se você estiver interessado. O fato é que, mesmo que seja baseado na detecção de bot de videogame, você pode generalizá-lo na Web porque há um usuário anexado aos padrões de uso.

Eu concordo com o método dessa abordagem da MusiGenesis, porque é o que eu uso no meu site e funciona decentemente bem. O processo CAPTCHA invisível é uma maneira decente de bloquear a maioria dos scripts, mas isso ainda não impede que um gravador de scripts faça engenharia reversa no seu método e "falsifique" os valores que você procura em javascript.

Eu direi que o melhor método é 1) estabelecer um usuário para que você possa bloquear quando estiver ruim, 2) identificar um algoritmo que detecte padrões típicos versus padrões não típicos de uso do site e 3) bloqueie o usuário de acordo.

jwendl
fonte
Por que um bot não pode registrar OpenIDs? Um invasor só precisa criar seu próprio editor OpenID.
Rjmunro 24/07/2009
Sim @rjmunro, e isso é uma coisa boa. A dificuldade da internet é a identificação de usuários anônimos. Se um bot registra um OpenID e você identifica esse usuário OpenID como um bot, é possível desligá-lo. Não é mais anônimo. Isso não impede vários registros pelo mesmo provedor, mas você pode desligá-lo por permitir bots. O objetivo é remover a anonímia da Internet da melhor maneira possível.
jwendl
10

Tenho algumas idéias que gosto de compartilhar com você ...

Primeira idéia para evitar OCR

Um captcha que possui alguma parte oculta do usuário, mas a imagem completa é o código em conjunto; portanto, os programas OCR e os captcha farms lêem a imagem que inclui a parte visível e a parte oculta, tentam decodificar os dois e falham no envio. .. - Eu tenho tudo pronto para corrigir esse e trabalhar online.

http://www.planethost.gr/IdeaWithHiddenPart.gif

Segunda ideia para facilitar

Uma página com muitas palavras que o humano deve selecionar a correta. Eu também criei este, é simples. As palavras são imagens clicáveis ​​e o usuário deve clicar na direita.

http://www.planethost.gr/ManyWords.gif

Terceira idéia sem imagens

O mesmo que o anterior, mas com divs e textos ou pequenos ícones. O usuário deve clicar apenas em uma div / letra / imagem correta, seja qual for.

http://www.planethost.gr/ArrayFromDivs.gif

Ideia Final - Chamo-lhe CicleCaptcha

E mais um CicleCaptcha , o usuário deve localizar um ponto em uma imagem. Se ele encontrar e clicar nele, então é uma pessoa, as máquinas provavelmente falham ou precisam criar um novo software para encontrar uma maneira de fazer isso.

http://www.planethost.gr/CicleCaptcha.gif

Quaisquer críticos são bem-vindos.

Aristos
fonte
Re-captcha tem texto em fala para suas palavras. Pode indicar onde clicar.
Robert P
@RobertP Clicar em um deficiente visual é como atirar em um deficiente visual ... "Apenas aponte para a cabeça".
8
@pst "Um pouco para a esquerda. Está certo, um pouco mais. Bom. Bom. Agora volte. Suba. Não, suba para o outro lado. Sim, você conseguiu. Só mais um pouco. Sim. Só um pouco mais. Quase lá. Quase lá ... quase ... quase ... CAPTCHA !!! "
Robert P
7

Recentemente, comecei a adicionar uma tag com o nome e o ID definidos como "message". Eu o defino como oculto com CSS (exibição: nenhuma). Os bots de spam o veem, preenchem e enviam o formulário. No lado do servidor, se a área de texto com o nome do ID estiver preenchida, março a postagem como spam.

Outra técnica na qual estou trabalhando é gerar aleatoriamente nomes e IDs, sendo alguns como verificação de spam e outros como campos regulares.

Isso funciona muito bem para mim e ainda não recebi nenhum spam bem-sucedido. No entanto, recebo muito menos visitantes nos meus sites :)

Brandon Wamboldt
fonte
Usar o css para ocultar o campo do formulário e afirmar que ele está vazio também funcionou para mim. Não é à prova de idiotas, mas é uma boa opção.
Chris
Técnica 1: Honeypot
kevinji
6

Aritmética muito simples é boa. Pessoas cegas serão capazes de responder. (Mas, como Jarod disse, tenha cuidado com a precedência do operador.) Acho que alguém poderia escrever um analisador, mas isso torna o spam mais caro.

Suficientemente simples e não será difícil codificá-lo. Eu vejo duas ameaças aqui:

  1. spambots aleatórios e spambots humanos que possam apoiá-los; e
  2. bots criados para o jogo Stack Overflow

Com aritmética simples, você pode vencer a ameaça número 1, mas não a ameaça número 2.

Josh
fonte
Um analisador, eu diria, é significativamente mais fácil do que escrever um cracker de captura de imagem. Lembre-se, a coisa mais fácil que você oferece aos usuários é o que um spambot provavelmente usará. Infelizmente, o captcha sem JS precisa ser mais difícil.
Stalepretzel # 1/08
5

E se você usasse uma combinação das idéias captcha que tinha (escolha uma delas - ou selecione uma delas aleatoriamente):

  • Captcha de texto ASCII: // (_) //
  • enigmas matemáticos: o que é 7 menos 3 vezes 2?
  • perguntas triviais: o que é melhor, um sapo ou um picolé?

com a adição de colocar exatamente o mesmo captcha em uma seção oculta da página css - a ideia do honeypot. Dessa forma, você teria um lugar em que esperaria a resposta correta e outro em que a resposta deveria permanecer inalterada.

TheEmirOfGroofunkistan
fonte
1
"O que é melhor" é bastante subjetivo, na minha opinião. As pessoas que saem do ramo em relação ao paladar serão interpretadas como um bot. Além disso, com apenas duas respostas, a chance de passar como bot é de 50%.
Pimvdb
É verdade na parte subjetiva, mas o particular era da pergunta original. Meu objetivo era usar todos os três (ou vários) tipos aleatoriamente. Além disso, a chance de aprovação é de apenas 50% se a resposta for de múltipla escolha. Se o usuário digitar a palavra sem indicar as respostas possíveis em uma lista, fica muito mais difícil para um bot escolher as palavras corretas na pergunta / resposta.
TheEmirOfGroofunkistan
5

Eu tive resultados surpreendentemente bons com um simples campo "Deixe este campo em branco:". Os robôs parecem preencher tudo, principalmente se você nomear o campo com algo como "URL". Combinado com a verificação rigorosa de referências, eu ainda não tive um bot que passou por isso.

Por favor, não se esqueça da acessibilidade aqui. Captchas são notoriamente inutilizáveis ​​para muitas pessoas que usam leitores de tela. Problemas simples de matemática ou trivialidades triviais (gostei da pergunta "que cor é o céu") são muito mais amigáveis ​​para usuários com deficiência visual.

Tina Marie
fonte
5

Texto simples parece ótimo. Suborne a comunidade para fazer o trabalho! Se você acredita, como eu, que os pontos de representação da SO medem o compromisso de um usuário em ajudar o site a ter sucesso, é completamente razoável oferecer pontos de reputação para ajudar a proteger o site contra spammers.

Ofereça +10 de reputação para cada contribuição de uma pergunta simples e um conjunto de respostas corretas. A pergunta deve estar adequadamente distante (editar distância) de todas as perguntas existentes, e a reputação (e a pergunta) deve desaparecer gradualmente se as pessoas não puderem responder. Digamos que se a taxa de falhas nas respostas corretas for superior a 20%, o remetente perderá um ponto de reputação por resposta incorreta, até um máximo de 15. Portanto, se você enviar uma pergunta ruim, receberá +10 agora, mas eventualmente receberá net -5. Ou talvez faça sentido pedir a uma amostra de usuários que vote se a questão do captcha é boa.

Por fim, como o limite de rep diário, digamos que nenhum usuário possa ganhar mais de 100 reputação enviando perguntas captcha. Essa é uma restrição razoável ao peso atribuído a essas contribuições e também pode ajudar a impedir que os remetentes de spam enviem perguntas ao sistema. Por exemplo, você pode escolher perguntas não com igual probabilidade, mas com uma probabilidade proporcional à reputação do remetente. Jon Skeet, por favor não envie perguntas :-)

Norman Ramsey
fonte
5

Faça uma consulta AJAX para um nonce criptográfico no servidor. O servidor envia de volta uma resposta JSON contendo o nonce e também define um cookie que contém o valor do nonce. Calcule o hash SHA1 do nonce em JavaScript, copie o valor em um campo oculto. Quando o usuário envia o formulário, ele agora envia o cookie de volta com o valor nonce. Calcule o hash SHA1 do nonce a partir do cookie, compare com o valor no campo oculto e verifique se você gerou esse nonce nos últimos 15 minutos (o memcached é bom para isso). Se todas essas verificações passarem, publique o comentário.

Essa técnica exige que o remetente de spam se sente e descubra o que está acontecendo e, assim que o fizer, ainda precisará disparar várias solicitações e manter o estado do cookie para fazer um comentário. Além disso, eles só veem o Set-Cookiecabeçalho se analisam e executam o JavaScript em primeiro lugar e fazem a solicitação AJAX. Isso é muito, muito mais trabalhoso do que a maioria dos spammers deseja, principalmente porque o trabalho se aplica apenas a um único site. A maior desvantagem é que qualquer pessoa com JavaScript desativado ou cookies desativados é marcada como possível spam. O que significa que as filas de moderação ainda são uma boa ideia.

Em teoria, isso pode se qualificar como segurança através da obscuridade, mas, na prática, é excelente.

Nunca vi um remetente de spam se esforçar para quebrar essa técnica, embora talvez a cada dois meses eu receba uma entrada de spam no tópico inserida manualmente, e isso seja um pouco assustador.

Bob Aman
fonte
5

1) Resolvedores humanos

Todas as soluções mencionadas aqui são contornadas pela abordagem de solucionadores humanos. Um spambot profissional mantém centenas de conexões e, quando não consegue resolver o próprio CAPTCHA, passa a captura de tela para solucionadores humanos remotos.

Costumo ler que solucionadores humanos de CAPTCHAs violam as leis. Bem, isso foi escrito por aqueles que não sabem como essa indústria (spam) funciona.
Os solucionadores humanos não interagem diretamente com os sites que os CAPTCHAs resolvem. Eles nem sabem de quais sites os CAPTCHAs foram retirados e os enviaram. Estou ciente de que dezenas (se não centenas) de empresas ou sites oferecem serviços de solucionadores de problemas humanos, mas nenhum para interação direta com placas quebradas.
Este último não infringe nenhuma lei, portanto, a solução do CAPTCHA é completamente legal (e registrada oficialmente) em empresas comerciais. Eles não têm intenções criminais e podem, por exemplo, ter sido usados ​​para testes remotos, investigações, provas de conceito, protótipos, etc.

2) Spam baseado em contexto

Os bots de IA (Artificial Intelligent) determinam contextos e mantêm diálogos sensíveis ao contexto em momentos diferentes de diferentes endereços IP (de diferentes países). Mesmo os autores de blogs frequentemente não conseguem entender que os comentários são de bots. Não entrarei em muitos detalhes, mas, por exemplo, os bots podem criar diálogos humanos na Web, armazená-los no banco de dados e simplesmente reutilizá-los (frase por frase), para que não sejam detectáveis ​​como spam por software ou até por seres humanos.

A resposta mais votada dizendo:

  • * "A teoria é que:
    • Um bot de spam não suporta JavaScript e envia o que vê
    • Se o bot suportar JavaScript, ele enviará o formulário instantaneamente
    • O comentarista leu pelo menos parte da página antes de postar "*

bem como resposta honeypot e a maioria das respostas neste tópico estão completamente erradas.
Ouso dizer que são abordagens condenadas à vítima

A maioria dos spambots trabalha com navegadores locais e remotos com reconhecimento de javascript (corrigidos e gerenciados) de IPs diferentes (de diferentes países) e são bastante inteligentes para contornar armadilhas e vasos de mel.

O problema diferente é que mesmo os proprietários de blogs não conseguem detectar com frequência que os comentários são do bot, pois são realmente de diálogos humanos e comentários colhidos em outras placas da web (fóruns, comentários do blog etc.)

3) Abordagem conceitualmente nova

Desculpe, eu removi esta parte como precipitada

Gennady Vanin Геннадий Ванин
fonte
1
Você descreveu o problema com quase todas as respostas neste tópico. Todos eles seriam derrotados rapidamente se não fossem exclusivos do pequeno site. Se algum deles fosse usado em um site grande ou em vários sites pequenos (digamos, como um plugin do Wordpress), eles seriam derrotados em um dia. Eles realmente não são CAPTCHAS, mas sim casos de segurança através da obscuridade. Você também está certo; o spam moderno está colocando comentários que nem eu consigo reconhecer como spam. Desisti do CAPTCHA e, em vez disso, usei o Mollom. O spam de crowdsourcing é uma abordagem melhor.
Dan
5

Na verdade, pode ser uma ideia ter um conjunto de captcha relacionado à programação. Por exemplo:

CAPTCHA

Existe a possibilidade de alguém criar um verificador de sintaxe para ignorar isso, mas é muito mais trabalho ignorar um captcha. Você tem a ideia de ter um captcha relacionado.

Ross
fonte
5
Exceto: Você saberia que a resposta para a pergunta de exemplo (no caso de alguém se deparar com isso mais tarde e a imagem não aparecer: "Quantos erros de sintaxe PHP há $var == array(1 = 'one');;") 1, não é 3? (Sério. Tente $var == array(1 => 'one');;) ^ _ ~
pinkgothic
Heh, já faz tempo que não me lembro de ter criado essa imagem. Você está certo, é claro, e eu não acho que isso seria muito bom como um captcha - mas talvez como um requisito de entrada para um fórum de programação.
Ross
4

Tenho que admitir que não tenho experiência em combater spambots e realmente não sei o quão sofisticados eles são. Dito isto, não vejo nada no artigo do jQuery que não possa ser realizado apenas no servidor.

Para reformular o resumo do artigo jQuery:

  1. Ao gerar o formulário de contato no servidor ...
  2. Pegue a hora atual.
  3. Combine esse registro de data e hora, além de uma palavra secreta, gere um 'hash' de 32 caracteres e armazene-o como um cookie no navegador do visitante.
  4. Armazene o carimbo de data / hora do hash ou do 'token' em uma tag de formulário oculta.
  5. Quando o formulário é postado novamente, o valor do registro de data e hora será comparado ao 'token' de 32 caracteres armazenado no cookie.
  6. Se as informações não corresponderem ou estiverem ausentes, ou se o carimbo de data / hora for muito antigo, pare a execução da solicitação ...

Outra opção, se você deseja usar a imagem tradicional CAPTCHA sem a sobrecarga de gerá-las em todas as solicitações, é pré-gerá-las offline. Então você só precisa escolher aleatoriamente um para exibir em cada formulário.

Peter
fonte