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.
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?
fonte
Respostas:
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:
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:
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.
A teoria é que:
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.
fonte
Meu CAPTCHA favorito de todos os tempos :
fonte
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.
fonte
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 ^ _ ^
fonte
Que tal um captcha honeypot ?
fonte
Hey, if youre a human, keep this field blank!
Evite os piores CAPTCHAs de todos os tempos .
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.
fonte
Vi isso uma vez no site de um amigo. Ele está vendendo por 20 dólares. É arte ASCII!
http://thephppro.com/products/captcha/
fonte
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:
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 ...
fonte
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.
fonte
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!
fonte
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 ...
fonte
Asirra é o captcha mais adorável de todos os tempos.
fonte
Basta fazer o usuário resolver expressões aritméticas simples:
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:
Obviamente, a razão pela qual isso funciona é porque todos os spammers são inteligentes o suficiente
eval
para resolver o captcha em uma linha de código.fonte
rm
contra a execução-rf /
.literal_eval
(ou equivalentes em outras línguas), o que é um fato bastante triste.rm -rf ~
seria destrutiva se o script está sendo executado na máquina pessoal de alguémEu 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:
Em seguida, use CSS para ocultá-los:
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.
fonte
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:
fonte
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.
fonte
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 ..
fonte
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.
fonte
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.
fonte
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.
fonte
Melhor captcha de sempre! Talvez você precise de algo assim para se inscrever para manter o riff-raff fora.
fonte
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 :)
fonte
Suficientemente simples e não será difícil codificá-lo. Eu vejo duas ameaças aqui:
Com aritmética simples, você pode vencer a ameaça número 1, mas não a ameaça número 2.
fonte
E se você usasse uma combinação das idéias captcha que tinha (escolha uma delas - ou selecione uma delas aleatoriamente):
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.
fonte
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.
fonte
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 :-)
fonte
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-Cookie
cabeç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.
fonte
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:
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
fonte
Na verdade, pode ser uma ideia ter um conjunto de captcha relacionado à programação. Por exemplo:
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.
fonte
$var == array(1 = 'one');;
")1
, não é3
? (Sério. Tente$var == array(1 => 'one');;
) ^ _ ~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:
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.
fonte