Approches CAPTCHA pratiques sans image?

318

Il semble que nous allons ajouter la prise en charge de CAPTCHA à Stack Overflow. Cela est nécessaire pour empêcher les robots, les spammeurs et toute autre activité scriptée malveillante. Nous voulons seulement que les êtres humains publient ou modifient des choses ici!

Nous utiliserons un CAPTCHA JavaScript (jQuery) comme première ligne de défense:

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

L'avantage de cette approche est que, pour la plupart des gens, le CAPTCHA ne sera jamais visible!

Cependant, pour les personnes avec JavaScript désactivé, nous avons toujours besoin d'une solution de repli et c'est là que cela devient difficile.

J'ai écrit un contrôle CAPTCHA traditionnel pour ASP.NET que nous pouvons réutiliser.

CaptchaImage

Cependant, je préfère aller avec quelque chose de textuel pour éviter la surcharge de création de toutes ces images sur le serveur à chaque demande.

J'ai vu des choses comme ..

  • Captcha texte ASCII: \/\/(_)\/\/
  • énigmes mathématiques: qu'est-ce que 7 moins 3 fois 2?
  • questions triviales: qu'est-ce qui a meilleur goût, un crapaud ou un popsicle?

Peut-être que je suis juste en train d'incliner les moulins à vent ici, mais j'aimerais avoir un <noscript>CAPTCHA compatible moins gourmand en ressources et sans image si possible.

Des idées?

Jeff Atwood
la source
16
Il n'est pas nécessaire de créer réellement une image sur le serveur. Vous avez juste besoin de gérer la demande. Par exemple <img src = "generateImage.aspx? Guid = blah">
Brian R. Bondy
58
Les questions triviales sont sujettes à des préjugés culturels (pensez à un français qui répond à votre question ...). De plus, ils peuvent s'attaquer aux utilisateurs dont l'anglais n'est pas natif. De plus, ils peuvent facilement être cassés en utilisant la force brute (vous n'avez que ~ 2 ^ # _ options OfQuestions).
Adam Matan
72
Et qu'est-ce qu'un popsicle?
Fraser
57
Selon Wolfram Alpha, "ce qui est 7 moins 3 fois 2" est 1. Je pensais que c'était 8. Je pense que vous venez d'inventer l'anti-captcha.
Mike Robinson
50
@Mike Robinson: Je pense que les programmeurs devraient connaître la priorité des opérateurs dans l'utilisation de la journée NORMALE =)
Gnark

Réponses:

205

Une méthode que j'ai développée et qui semble fonctionner parfaitement (même si je ne reçois probablement pas autant de spam de commentaires que vous), consiste à avoir un champ caché et à le remplir avec une valeur fausse, par exemple:

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

J'ai ensuite un morceau de JavaScript qui met à jour la valeur chaque seconde avec le nombre de secondes pendant lesquelles la page a été chargée:

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();

Ensuite, lorsque le formulaire est soumis, si la valeur antispam est toujours "lalalala", je le marque comme spam. Si la valeur antispam est un entier, je vérifie si elle est supérieure à quelque chose comme 10 (secondes). S'il est inférieur à 10, je le marque comme spam, s'il est supérieur ou égal à 10, je le laisse passer.

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

La théorie étant que:

  • Un robot spam ne prend pas en charge JavaScript et soumet ce qu'il voit
  • Si le bot prend en charge JavaScript, il soumettra le formulaire instantanément
  • Le commentateur a au moins lu une partie de la page avant de poster

L'inconvénient de cette méthode est qu'elle nécessite JavaScript, et si vous n'avez pas activé JavaScript, votre commentaire sera marqué comme spam, cependant, je passe en revue les commentaires marqués comme spam, donc ce n'est pas un problème.

Réponse aux commentaires

@MrAnalogy: L'approche côté serveur semble être une bonne idée et est exactement la même chose que le faire en JavaScript. Bon appel.

@AviD: Je suis conscient que cette méthode est sujette aux attaques directes comme je l'ai mentionné sur mon blog . Cependant, il se défendra contre votre robot de spam moyen qui soumet aveuglément les déchets à toute forme qu'il peut trouver.

GateKiller
la source
45
VERSION QUI FONCTIONNE SANS JAVASCRIPT Que diriez-vous si vous avez fait cela avec ASP, etc. et que vous aviez un horodatage pour le moment où la page du formulaire a été chargée, puis comparé cela à l'heure à laquelle le formulaire a été soumis. Si ElapsedTime <10 sec, il s'agit probablement d'un spam.
Clay Nichols
28
Très évidemment contournable, si un utilisateur malveillant prend la peine de le regarder. Bien que je sois sûr que vous en soyez conscient, je suppose que vous supposez qu'ils ne dérangeront pas ... Eh bien, si ce n'est pas un site de valeur, alors vous avez raison et ils ne dérangeront pas - mais si c'est le cas, alors ils le feront et se déplacer assez facilement ...
AviD
48
Voici une torsion à ce sujet que j'utilise. Faites de la valeur cachée une heure chiffrée définie à maintenant. Au retour, vérifiez qu'entre 10 secondes et 10 minutes se sont écoulées. Cela déjoue les filous qui essaient de brancher une valeur toujours valide.
Tim Scott
7
À tous ceux qui ont souligné que les bots pouvaient passer ... Je le sais comme je l'ai souligné dans la réponse. C'est une méthode très simple pour arrêter votre bot moyen et vos utilisateurs ennuyés. Je l'utilise actuellement sur mon blog et jusqu'à présent, il a réussi à 100%.
GateKiller
8
Je pense qu'il vaut mieux commencer par des tests faciles à contourner pour voir s'ils sont adéquats.
pbreitenbach
211

Mon CAPTCHA préféré :

Captcha

ceejayoz
la source
13
Celui-là est super. Le lien vers le site est random.irb.hr/signup.php . Parfois, c'est beaucoup plus facile
Marcio Aguiar
22
Le seul problème est que c'est vraiment difficile pour la majorité des humains, mais les ordinateurs n'auront généralement aucun problème avec cela.
Tim Matthews
7
Je crois que la réponse à ce problème est -3?
dancavallaro
2
@Erik, pas vraiment. Cela empêche également ceux qui ont un doctorat en informatique mais qui ne veulent pas s'en soucier.
BobbyShaftoe
28
-3 semble correct. Je me souviens avoir utilisé ce site Web pour des recherches il y a quelque temps et quand je suis arrivé au Captcha, j'étais tellement heureux parce que c'était amusant et différent. Il s'agit d'un accès à un générateur de nombres aléatoires quantiques utilisant une véritable source de désintégration radioactive.
Alex
57

À moins que je manque quelque chose, quel est le problème avec l'utilisation de reCAPTCHA car tout le travail est effectué en externe.

Juste une pensée.

thing2k
la source
17
Re-captcha est hostile à l'utilisateur. Captchs est déjà assez mauvais. Mais le rendre plus difficile pour les utilisateurs afin d'obtenir de minuscules avantages de l'OCR est positivement hostile.
pbreitenbach
19
pourquoi est hostile à l'utilisateur? le spam est-il convivial?
Elzo Valugi
14
Il est hostile aux utilisateurs, car parfois les images sont difficiles à décoder, même pour les humains, et peuvent causer de la frustration chez les utilisateurs légitimes lorsque cela se produit. Voir le lien de Josh avec le pire CAPTCHAS pour quelques exemples d'images trop difficiles à décoder.
Andrei Fierbinteanu
4
@Andrei, vous pouvez toujours faire en sorte que reCAPTCHA charge une autre image si elle est trop difficile pour vous.
mhitza
23
reCAPTCHA est très bien, et il implémente une option d'accessibilité à laquelle 95% des solutions locales ne pensent même pas.
alxp
42

L'avantage de cette approche est que, pour la plupart des gens, le CAPTCHA ne sera jamais visible!

J'aime cette idée, n'y a-t-il pas moyen que nous puissions simplement nous connecter au système de représentation? Je veux dire, quiconque avec +100 rep est susceptible d'être un humain. Donc, s'ils ont des représentants, vous n'avez même pas besoin de faire quoi que ce soit en termes de CAPTCHA.

Ensuite, si ce n'est pas le cas, envoyez-le, je suis sûr qu'il ne faudra pas autant de messages pour arriver à 100 et la communauté plongera instantanément sur quiconque semble spammer avec des balises offensives, pourquoi ne pas ajouter un lien "signaler le spam" que downmods par 200? Obtenez 3 de ceux-ci, le succès du spambot est déverrouillé, au revoir;)

EDIT : Je devrais également ajouter, j'aime l'idée mathématique pour le CAPTCHA non-image. Ou peut-être une simple chose de type énigme. Peut rendre la publication encore plus intéressante ^ _ ^

Rob Cooper
la source
13
Que se passe-t-il si les informations d'identification d'un compte de membre à haut karma sont volées?
James McMahon
20
@nemo Ensuite, vous vous en occupez. Mais très peu de raisons d'éviter une solution pour cette seule raison.
pbreitenbach
Parce que tout le monde verrait le spam et le karma élevé et saurait qu'un compte a été volé.
hamstar
37

Qu'en est-il d'un captcha de pot de miel ?

lomaxx
la source
4
Explication de Honeypot Captcha (qui a l'air très bien): Les robots aiment les formes. Ils remplissent tous les champs. Un captcha de pot de miel comprend un champ qui est CACHÉ par CSS donc seuls les bots (et ceux avec IE 3.0) le voient. S'il est rempli, c'est un bot. Très simple à mettre en œuvre.
Clay Nichols
5
Encore une fois, trivialement contournable avec un investissement très minime de temps. Certes, vous réussirez à bloquer certains scriptkiddies, mais si votre site a de la valeur, ce n'est pas votre principale menace.
AviD
les captchas de pot de miel sont mauvais pour la convivialité - les lecteurs d'écran n'ignoreront pas les champs de formulaire cachés.
Bayard Randel
Oui, c'est simple à déployer et fonctionne très bien. L'accessibilité est le seul vrai problème.
meme
6
l'accessibilité peut être contournée par simple ajout de texte:Hey, if youre a human, keep this field blank!
Strae
30

Évitez les pires CAPTCHA de tous les temps .

Trivia est OK, mais vous devrez écrire chacun d'eux :-(

Il faudrait que quelqu'un les écrive.

Vous pouvez poser des questions triviales de la même manière que ReCaptcha fait des mots imprimés. Il propose deux mots, dont l'un connaît la réponse, un autre qu'il ne connaît pas - après suffisamment de réponses sur le second, il connaît désormais également la réponse. Posez deux questions triviales:

Une femme a besoin d'un homme comme un poisson a besoin d'un?

Orange orange orange. Tapez vert.

Bien sûr, cela peut devoir être couplé à d'autres techniques, telles que les minuteries ou les secrets calculés. Les questions devraient être tournées / retirées, donc pour maintenir l'offre de questions, vous pouvez ajouter de manière ad hoc:

Entrez votre question évidente:

Vous n'avez même pas besoin d'une réponse; d'autres humains le découvriront pour vous. Vous devrez peut-être autoriser le signalement des questions comme "trop ​​difficiles", comme celle-ci: "asdf ejflf asl; jf ei; fil; asfas".

Maintenant, pour ralentir quelqu'un qui exécute un bot de jeu StackOverflow, vous devez faire pivoter les questions par adresse IP - de sorte que la même adresse IP n'obtienne pas la même question jusqu'à ce que toutes les questions soient épuisées. Cela ralentit la construction d'un dictionnaire de questions connues, forçant le propriétaire humain des robots à répondre à toutes vos questions triviales.

Josh
la source
14
Soyez juste prudent avec les questions triviales car elles peuvent parfois être faciles pour vous et incroyablement difficiles pour les personnes de différents pays qui ne maîtrisent pas l'anglais, ou pour les personnes originaires de cultures différentes. Ils peuvent être contrariés si vous les forcez à utiliser le dictionnaire uniquement pour vous connecter! Ou pire encore, ils arrêtent simplement d'utiliser le site.
ya23
14
"Une femme a besoin d'un homme comme un poisson en a besoin?" Quelle est donc la réponse à cette question?
Lotus Notes
2
vélo. Citation d'Irina Dunn (popularisée par Gloria Steinem).
webbiedave
9
... comme un poisson a besoin d'une coccinelle.
matt lohkamp
28

J'ai vu ça une fois sur le site d'un ami. Il le vend pour 20 dollars. C'est de l'art 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'   
Jérémie
la source
2
+1, bien que je ne pense pas que vous devriez payer pour quelque chose comme ça. Je préfère qu'il soit construit à partir de zéro.
Dalin Seivewright
5
sympa, mais aurait aussi besoin d'une version parlée pour les aveugles
pro
29
Le problème avec ceci est qu'il est plus facile qu'une image de se fissurer. Tout ce que vous auriez à faire est de le lire dans une image, et vous avez une image parfaite en noir et blanc sur laquelle effectuer l'OCR.
Andrei Krotkov le
@Andrei, il existe une version alternative à cela, générée en utilisant "figlet", cela peut "bouillonner" les caractères ensemble afin que les caractères du captcha partagent les caractères ASCII. Ce sont un peu plus difficiles à l'OCR.
Pasi Savolainen
58
Cela peut être de la publicité, mais a) c'est une réponse valable à la question et b) l'auteur déclare clairement que c'est par un ami (ce qui signifie qu'il déclare clairement être partial), donc je ne vois aucun problème avec la réponse .
Michael Stum
28

CAPTCHA, dans sa conceptualisation actuelle, est cassé et souvent facilement contourné. AUCUNE des solutions existantes ne fonctionne efficacement - GMail ne réussit que 20% du temps, au mieux.

C'est en fait bien pire que cela, car cette statistique n'utilise que l'OCR, et il existe d'autres moyens de le contourner - par exemple, les proxys CAPTCHA et les fermes CAPTCHA. J'ai récemment donné une conférence sur le sujet à l'OWASP, mais le ppt n'est pas encore en ligne ...

Bien que CAPTCHA ne puisse pas fournir une protection réelle sous quelque forme que ce soit, cela peut suffire à vos besoins, si ce que vous voulez est de bloquer les déchets occasionnels. Mais cela n'arrêtera pas même les spammeurs semi-professionnels.

En règle générale, pour un site avec des ressources de toute valeur à protéger, vous avez besoin d'une approche à trois volets:

  • Limitez les réponses des utilisateurs authentifiés uniquement, interdisez les publications anonymes.
  • Minimisez (n'empêchez pas) les quelques messages de corbeille d'utilisateurs authentifiés, par exemple basés sur la réputation. Un modérateur humain peut également aider ici, mais alors vous avez d'autres problèmes - à savoir, inonder (ou même noyer) le modérateur, et certains sites préfèrent l'ouverture ...
  • Utilisez une logique heuristique côté serveur pour identifier un comportement de type spam ou un meilleur comportement non humain.

CAPTCHA peut aider un tout petit peu avec la deuxième broche, simplement parce que cela change l'économie - si les autres broches sont en place, il ne vaut plus la peine de déranger le CAPTCHA (coût minimal, mais toujours un coût) pour réussir dans une telle une petite quantité de spam.

Encore une fois, tous vos spams (et autres poubelles) ne seront pas générés par ordinateur - en utilisant le proxy CAPTCHA ou la ferme, les méchants peuvent avoir de vraies personnes qui vous spamment.


Le proxy CAPTCHA est lorsqu'il sert votre image aux utilisateurs d'autres sites, par exemple du porno, des jeux, etc.

Une ferme CAPTCHA a de nombreux travailleurs bon marché (Inde, Extrême-Orient, etc.) qui les résolvent ... généralement entre 2 et 4 $ pour 1000 captchas résolus. Récemment vu une publication pour cela sur Ebay ...

AviD
la source
Les proxys et les fermes ne le cassent pas et ne contournent pas 'CAPTCHA' car ils sont résolus par les humains. En effet, leur existence même témoigne du fait que les méthodes actuelles fonctionnent! CAPTCHA ne signifie pas «Le type de soumission que je veux» seulement «Est-ce une soumission humaine» ...
Fraser
10
Exactement! Mais les CAPTCHA sont le plus souvent utilisés pour empêcher les "bots" - et peu importe que ces bots soient humains ou non, l'intention est d'empêcher une utilisation massive et non personnelle. Cela prouve ce que je dis toujours, CAPTCHA résout le mauvais problème (et le fait si mal) ...
AviD
Il y a beaucoup de situations où le captcha est bien. Le fait est que les propriétaires de sites Web doivent choisir une solution qui équilibre l'expérience utilisateur et le contrôle. Pour certains, pas de captcha. Pour les autres, captcha. Pour d'autres encore, autre chose. Mais simplement rejeter le captcha n'est pas intelligent.
pbreitenbach
1
Le problème vient de penser que mettre CAPTCHA vous donnera ce contrôle. Ce n'est pas le cas. Pas un morceau substantiel. Il existe de rares situations où il peut apporter une certaine valeur, mais PAS un "contrôle". (J'ai souvent mentionné le CAPTCHA ici, avec les autres mécanismes, cela donne un petit plus pour que le spam ne vaille pas la peine.)
AviD
27

Ainsi, CAPTCHA est obligatoire pour tous les utilisateurs à l'exception des modérateurs. [1]

C'est incroyablement stupide. Il y aura donc des utilisateurs qui pourront éditer n'importe quel message sur le site mais pas publier sans CAPTCHA? Si vous avez suffisamment de représentants pour voter en aval, vous avez suffisamment de représentants pour publier sans CAPTCHA. Augmentez-le si vous le devez. De plus, il existe de nombreuses méthodes de détection de spam que vous pouvez utiliser sans reconnaissance d'image, de sorte que même pour les utilisateurs non enregistrés, il ne serait jamais nécessaire de remplir ces formulaires CAPTCHA abandonnés.

andrewrk
la source
26

Assurez-vous que ce n'est pas quelque chose que Google peut répondre . Ce qui montre également un problème avec cet ordre des opérations!

nlucaroni
la source
20

Pourquoi ne pas utiliser la communauté elle-même pour vérifier que tout le monde ici est humain, c'est-à-dire quelque chose comme un réseau de confiance? Pour trouver une personne vraiment digne de confiance pour démarrer le Web, je suggère d'utiliser ce CAPTCHA pour vous assurer qu'il est absolument et 100% humain.

Rapidshare CAPTCHA - Hypothèse de Riemann http://codethief.eu/kram/_/rapidshare_captcha2.jpg

Certes, il y a une toute petite chance qu'il soit trop occupé à préparer son discours de la médaille Fields pour nous aider à construire le réseau de confiance, mais bon ...

2 tours
la source
17

Asirra est le captcha le plus adorable de tous les temps.

Nick Retallack
la source
Au début, je l'ai lu comme "Asirra est le captcha le plus adoptable de tous les temps." ce qui m'a jeté légèrement. Je conviens que c'est probablement le plus adorable, mais comme il est indiqué sur le site, un écrivain de bot pourrait simplement enregistrer toutes les images (pourrait prendre un certain temps), les classer puis le bot le casserait facilement.
Dalin Seivewright
7
comment une personne aveugle peut-elle y répondre?
BBetances
c'est presque la même chose que reCAPTCHA. nous recherchons une approche moins irritante et sans image.
AhmetB - Google
Je dois dire qu'ils utilisent un assez grand nombre d'images pour vérifier leur démo.
pimvdb
1
J'ai eu 3 essais avant d'admettre que je suis un humain - probablement parce que certaines images ressemblaient à de grosses boules de fourrure.
Kramii
16

Faites simplement résoudre par l'utilisateur des expressions arithmétiques simples:

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

etc.

Une fois que les spammeurs ont compris, il devrait être assez facile de les repérer. Chaque fois qu'un spammeur détecté demande, basculez entre les deux commandes suivantes:

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

De toute évidence, la raison pour laquelle cela fonctionne est que tous les spammeurs sont assez intelligents pour utiliser evalpour résoudre le captcha en une seule ligne de code.

L̲̳o̲̳̳n̲̳̳g̲̳̳p̲̳o̲̳̳k̲̳̳e̲̳̳
la source
1
Également +1 pour cruauté, mais je voulais juste ajouter que cela ne fonctionnerait pas avec moi, j'utilise le fournisseur d'évaluation VB.NET et vérifie le format c: ou rm -rf, les nouvelles lignes, les deux-points, les points-virgules, etc. Vous avez besoin être un peu plus inventif que ça. Et d'ailleurs, je n'ai jamais laissé les scripts Linux s'exécuter en tant que root, c'est pourquoi cela ne fonctionnerait pas non plus.
Stefan Steiger
@Longpoke Cela ne fonctionnera tout simplement pas. Sur la plupart des Unix modernes, une protection est intégrée rmcontre l'exécution avec -rf /.
hamstergene
lol ce serait drôle si tu disais ça pour me faire essayer. Peut-être que rm -rf / * fonctionnerait à la place. Quoi qu'il en soit, il y a beaucoup d'autres mauvaises choses que vous pouvez faire.
L̲̳o̲̳̳n̲̳̳g̲̳̳p̲̳o̲̳̳k̲̳̳e̲̳̳
Cela suppose également que les gens ne connaissent pas Python literal_eval(ou ses équivalents dans d'autres langues), ce qui est assez triste.
Petr Viktorin
rm -rf ~serait destructeur si le script s'exécute sur la machine personnelle de quelqu'un
kirb
16

J'utilise la technique simple suivante, ce n'est pas infaillible. Si quelqu'un veut vraiment contourner cela, il est facile de regarder la source (c'est-à-dire qu'il ne convient pas au Google CAPTCHA) mais cela devrait tromper la plupart des bots.

Ajoutez 2 champs de formulaire ou plus comme ceci:

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

Utilisez ensuite CSS pour les masquer:

.hideme {
    display: none;
}

Lors de la soumission, vérifiez si ces champs de formulaire contiennent des données, s'ils échouent à la publication du formulaire. Le raisonnement étant que les bots liront le HTML et tenteront de remplir chaque champ de formulaire alors que les humains ne verront pas les champs de saisie et ne les laisseront pas.

Il y a évidemment beaucoup plus de choses que vous pouvez faire pour rendre cela moins exploitable, mais ce n'est qu'un concept de base.

Tama
la source
7
"honeypot captcha"
mpen
15

Bien que nous devrions tous connaître les mathématiques de base, le casse-tête mathématique pourrait créer une certaine confusion. Dans votre exemple, je suis sûr que certaines personnes répondraient par "8" au lieu de "1".

Une simple chaîne de texte avec des caractères aléatoires surlignés en gras ou en italique conviendrait-elle? L'utilisateur a juste besoin d'entrer les lettres en gras / italique comme CAPTCHA.

Par exemple s sdfa t werwe a jh c sad k oghvefdhrffghlfgdhowfgh

Dans ce cas, "pile" serait le CAPTCHA. Il existe évidemment de nombreuses variantes sur cette idée.

Edit: Exemples de variantes pour résoudre certains des problèmes potentiels identifiés avec cette idée:

  • en utilisant des lettres de couleur aléatoire au lieu de gras / italique.
  • en utilisant une seconde lettre rouge pour le CAPTCHA (réduit la possibilité pour les bots d'identifier des lettres de format différent pour deviner le CAPTCHA)
Jarod Elliott
la source
1
J'aime celui-ci - par exemple "veuillez saisir le mot épelé par la troisième lettre rouge soulignée, la quatrième lettre verte en gras et la cinquième lettre bleue en gras".
An̲̳̳drew
9
Cet exemple ci-dessus 'ssdfatwerweajhcsadkoghvefdhrffghlfgdhowfgh' pourrait être résolu par une simple expression régulière
alex
Ce ne serait pas bon pour les utilisateurs avec acalcula. Il y a des scientifiques avec cette affliction donc il n'est pas déraisonnable qu'il puisse y avoir des programmeurs avec.
BobbyShaftoe
Excellente idée! Peut-être même en jouant avec les couleurs changeantes du premier plan / arrière-plan, vous pouvez obtenir quelque chose qui affiche du texte facilement visible pour les humains, mais trop aléatoire pour les robots? Bien sûr, cela est plus difficile pour les personnes daltoniennes :-(
Shalom Craimer
2
L'utilisation de la couleur peut compliquer les choses, car vous devrez prendre en charge différentes formes de daltonisme. Sinon, cela semble assez bon.
KarstenF
12

Bien que cette discussion similaire ait été lancée:

Nous essayons cette solution sur l'une de nos applications fréquemment exploitées:

Un meilleur contrôle CAPTCHA (Regardez Ma - AUCUNE IMAGE!)

Vous pouvez le voir en action sur notre recherche d'inspections de bâtiments .

Vous pouvez afficher la source et voir que le CAPTCHA est simplement HTML.

KP.
la source
Cela fonctionnera pour MAINTENANT, mais dès qu'un nombre suffisant de sites utilisent une approche comme celle-ci, les spammeurs afficheront le code HTML en image et l'OCR le résultat.
warp
12

Je sais que personne ne lira ceci, mais qu'en est-il du chien ou du chat CAPTCHA?

Vous devez dire lequel est un chat ou un chien, les machines ne peuvent pas le faire. Http://research.microsoft.com/asirra/

Est-ce un cool ..

José Leal
la source
4
Les ordinateurs ne peuvent pas faire ça. Les aveugles non plus.
TRiG
1
Moi non plus, en le regardant sur un moniteur haute résolution. Ces images sont minuscules. L'un d'eux était également une créature non identifiable derrière une clôture blanche.
jsims281
10

J'utilise simplement des questions simples auxquelles tout le monde peut répondre:

De quelle couleur est le ciel?
De quelle couleur est une orange?
De quelle couleur est l'herbe?

Cela permet à quelqu'un de programmer un bot sur votre site, ce qui ne vaut probablement pas la peine. S'ils le font, vous changez simplement les questions.

tghw
la source
Cyc peut résoudre cela trivialement ... et c'est open source. Cela nécessiterait au plus quelques heures de script pour être implémenté.
rmeador
ceci est également utilisé par le forum ubuntu. j'aime ça, et les implémentations de chèques comme "2 + 2 =?" ou "quelle est la première lettre de l'alphabet" est très simple.
pistacchio
8
Les réponses: 1) En ce moment, un bleu clair, plus tard, rouge, puis noir avec des touches d'orange près du centre-ville. 2) orange, à moins qu'il ne soit moisi, alors il est vert ou noir ou blanc. 3) marron, en Californie du Sud, à moins que vous ne soyez à Beverly Hills, alors c'est vert.
MMR
52
@mmr Voir, c'est en fait un avantage du système, il empêche les smartasses de poster des commentaires ...
tghw
2
Les deuxième et troisième réponses sont biaisées en faveur des personnes vivant dans les déserts ou à Baltimore.
Mike Robinson
10

Personnellement, je n'aime pas CAPTCHA, cela nuit à la convivialité et ne résout pas le problème de sécurité qui rend invalides les utilisateurs valides.

Je préfère les méthodes de détection de bots que vous pouvez faire côté serveur. Puisque vous avez des utilisateurs valides (grâce à OpenID), vous pouvez bloquer ceux qui ne "se comportent pas", il vous suffit d'identifier les modèles d'un bot et de les faire correspondre aux modèles d'un utilisateur typique et de calculer la différence.

Davies, N., Mehdi, Q., Gough, N.: Création et visualisation d'un PNJ intelligent à l'aide de moteurs de jeu et d'outils AI http://www.comp.glam.ac.uk/ASMTA2005/Proc/pdf/game-06 .pdf

Golle, P., Ducheneaut, N.: Empêcher les robots de jouer à des jeux en ligne <- ACM Portal

Ducheneaut, N., Moore, R.: The Social Side of Gaming: A Study of Interaction Patterns in a Massively Multiplayer Online Game

Bien sûr, la plupart de ces références pointent vers la détection de robots de jeux vidéo, mais c'est parce que c'était le sujet du document de notre groupe intitulé Robot Wars: Une exploration en jeu de l'identification des robots . Il n'a pas été publié ou quoi que ce soit, juste quelque chose pour un projet d'école. Je peux envoyer un courriel si vous êtes intéressé. Le fait est que même s'il est basé sur la détection de robots de jeux vidéo, vous pouvez le généraliser sur le Web car il existe un utilisateur attaché aux modèles d'utilisation.

Je suis d'accord avec la méthode de MusiGenesis de cette approche parce que c'est ce que j'utilise sur mon site Web et cela fonctionne très bien. Le processus CAPTCHA invisible est un moyen décent de bloquer la plupart des scripts, mais cela n'empêche toujours pas un scénariste de rétro-concevoir votre méthode et de "truquer" les valeurs que vous recherchez en javascript.

Je dirai que la meilleure méthode consiste à 1) établir un utilisateur afin que vous puissiez bloquer lorsqu'il est mauvais, 2) identifier un algorithme qui détecte les modèles typiques par rapport aux modèles non typiques d'utilisation du site Web et 3) bloquer cet utilisateur en conséquence.

jwendl
la source
Pourquoi un bot ne peut-il pas enregistrer d'OpenID? Un attaquant a juste besoin de créer son propre éditeur OpenID.
rjmunro
Oui @rjmunro, et c'est une bonne chose. La difficulté d'Internet est l'identification des utilisateurs anonymes. Si un bot enregistre un OpenID et que vous identifiez cet utilisateur OpenID en tant que bot, vous pouvez le fermer. Ce n'est plus anonyme. Cela n'empêche pas plusieurs enregistrements par le même fournisseur, mais vous pouvez ensuite fermer ce fournisseur pour autoriser les bots. L'objectif est de supprimer le mieux possible l'anonymat d'Internet.
jwendl
10

J'ai quelques idées à ce sujet que j'aime partager avec vous ...

Première idée pour éviter l'OCR

Un captcha qui a une partie cachée de l'utilisateur, mais l'image complète est les deux codes ensemble, donc les programmes OCR et les fermes de captcha lisent l'image qui inclut la partie visible et la partie cachée, essayez de les décoder tous les deux et de ne pas soumettre. .. - Je suis prêt à résoudre ce problème et à travailler en ligne.

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

Deuxième idée pour le rendre plus facile

Une page avec beaucoup de mots que l'humain doit choisir le bon. J'ai aussi créé celui-ci, c'est simple. Les mots sont des images cliquables, et l'utilisateur doit cliquer sur la droite.

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

Troisième idée sans images

Identique à la précédente, mais avec des divs et des textes ou de petites icônes. L'utilisateur ne doit cliquer que sur une seule div / lettre / image correcte, quoi qu'il en soit.

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

Idée finale - je l'appelle CicleCaptcha

Et encore une fois mon CicleCaptcha , l'utilisateur doit localiser un point sur une image. S'il le trouve et clique dessus, alors c'est une personne, les machines échouent probablement, ou doivent créer un nouveau logiciel pour trouver un moyen avec celui-ci.

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

Tous les critiques sont les bienvenus.

Aristos
la source
Re-captcha a du texte à la parole pour ses mots. Il pourrait vous indiquer où cliquer.
Robert P
@RobertP Cliquer quand vous êtes malvoyant, c'est comme tirer quand vous êtes malvoyant ... "Visez juste la tête".
8
@pst "Un peu à gauche. C'est vrai, un peu plus. Bien. Bon. Maintenant de retour. En haut. Non, en sens inverse. Oui, vous l'avez. Juste un peu plus. Oui. Juste un peu plus. Presque là. Presque là ... presque ... presque ... CAPTCHA !!! "
Robert P
7

Récemment, j'ai commencé à ajouter une balise avec le nom et l'ID définis sur "message". Je l'ai mis sur caché avec CSS (affichage: aucun). Les robots spammeurs le voient, le remplissent et soumettent le formulaire. Côté serveur, si la zone de texte avec le nom d'identification est remplie, je marque le message comme spam.

Une autre technique sur laquelle je travaille génère des noms et des identifiants de manière aléatoire, certains étant des contrôles de spam et d'autres des champs réguliers.

Cela fonctionne très bien pour moi et je n'ai pas encore reçu de spam. Cependant, je reçois beaucoup moins de visiteurs sur mes sites :)

Brandon Wamboldt
la source
Utiliser css pour masquer le champ du formulaire et affirmer qu'il est vide a également fonctionné pour moi. Pas infaillible mais c'est une bonne option.
Chris
Technique 1: Honeypot
kevinji
6

L'arithmétique très simple est bonne. Les aveugles pourront répondre. (Mais comme Jarod l'a dit, méfiez-vous de la priorité des opérateurs.) Je suppose que quelqu'un pourrait écrire un analyseur, mais cela rend le spam plus coûteux.

Suffisamment simple, et il ne sera pas difficile de le coder. Je vois deux menaces ici:

  1. les spambots aléatoires et les spambots humains qui pourraient les sauvegarder; et
  2. des bots créés pour jouer à Stack Overflow

Avec des arithmétiques simples, vous pourriez repousser la menace n ° 1, mais pas la menace n ° 2.

Josh
la source
Un analyseur, je suppose, est beaucoup plus facile que d'écrire un cracker image-captcha. N'oubliez pas que la chose la plus simple que vous proposez aux utilisateurs est ce qu'un spambot utilisera probablement. Malheureusement, le captcha sans JS doit être plus difficile.
stalepretzel
5

Et si vous utilisiez une combinaison des idées captcha que vous aviez (choisissez l'une d'entre elles - ou sélectionnez l'une d'entre elles au hasard):

  • Captcha texte ASCII: // (_) //
  • énigmes mathématiques: qu'est-ce que 7 moins 3 fois 2?
  • questions triviales: qu'est-ce qui a meilleur goût, un crapaud ou un popsicle?

avec l'ajout de placer exactement le même captcha dans une section cachée CSS de la page - l'idée de pot de miel. De cette façon, vous auriez un endroit où vous vous attendriez à la bonne réponse et un autre où la réponse devrait être inchangée.

TheEmirOfGroofunkistan
la source
1
"Ce qui a meilleur goût" est assez subjectif, à mon avis. Les gens qui se disputent le goût seront interprétés comme un bot. De plus, avec seulement deux réponses, la chance de passer en bot est de 50%.
pimvdb
Vrai sur la partie subjective, mais le particulier provenait de la question d'origine. Mon point était d'utiliser les trois (ou plusieurs) types au hasard. De plus, les chances de réussite ne sont que de 50% si la réponse est à choix multiple. Si l'utilisateur fait taper le mot sans indiquer les réponses possibles dans une liste, il devient beaucoup plus difficile pour un bot de choisir les bons mots dans la question / réponse.
TheEmirOfGroofunkistan
5

J'ai eu des résultats incroyablement bons avec un simple champ "Laissez ce champ vide:". Les bots semblent remplir tout, surtout si vous nommez le champ quelque chose comme "URL". Combiné à une vérification stricte des référents, je n'ai pas encore eu de bot passé.

N'oubliez pas l'accessibilité ici. Les captchas sont notoirement inutilisables pour de nombreuses personnes utilisant des lecteurs d'écran. Les problèmes mathématiques simples ou les anecdotes très triviales (j'ai aimé la question "quelle couleur est le ciel") sont beaucoup plus conviviaux pour les utilisateurs malvoyants.

Tina Marie
la source
5

Le texte simple sonne bien. Soudoyer la communauté pour faire le travail!Si vous croyez, comme moi, que les points de représentation SO mesurent l'engagement d'un utilisateur à aider le site à réussir, il est tout à fait raisonnable d'offrir des points de réputation pour aider à protéger le site contre les spammeurs.

Offrez +10 points de réputation pour chaque contribution d'une question simple et d'un ensemble de réponses correctes. La question doit être suffisamment éloignée (modifier la distance) de toutes les questions existantes, et la réputation (et la question) devrait progressivement disparaître si les gens ne peuvent pas y répondre. Disons que si le taux d'échec sur les bonnes réponses est supérieur à 20%, le soumissionnaire perd un point de réputation par réponse incorrecte, jusqu'à un maximum de 15. Donc si vous soumettez une mauvaise question, vous obtenez +10 maintenant mais finalement vous le ferez net -5. Ou peut-être qu'il est logique de demander à un échantillon d'utilisateurs de voter pour savoir si la question captcha est bonne.

Enfin, comme pour le plafond des représentants quotidiens, disons qu'aucun utilisateur ne peut gagner plus de 100 points de réputation en soumettant des questions captcha. Il s'agit d'une restriction raisonnable du poids accordé à ces contributions, et cela peut également aider à empêcher les spammeurs de semer des questions dans le système. Par exemple, vous pouvez choisir des questions non pas avec une probabilité égale mais avec une probabilité proportionnelle à la réputation du demandeur. Jon Skeet, veuillez ne pas soumettre de questions :-)

Norman Ramsey
la source
5

Faites une requête AJAX pour un nonce cryptographique au serveur. Le serveur renvoie une réponse JSON contenant le nonce et définit également un cookie contenant la valeur nonce. Calculez le hachage SHA1 du nonce en JavaScript, copiez la valeur dans un champ caché. Lorsque l'utilisateur POSTE le formulaire, il renvoie maintenant le cookie avec la valeur nonce. Calculez le hachage SHA1 du nonce à partir du cookie, comparez-le à la valeur dans le champ caché et vérifiez que vous avez généré ce nonce au cours des 15 dernières minutes (memcached est bon pour cela). Si tous ces contrôles réussissent, postez le commentaire.

Cette technique nécessite que le spammeur s'assoit et comprenne ce qui se passe, et une fois qu'il le fait, il doit encore déclencher plusieurs demandes et maintenir l'état des cookies pour faire passer un commentaire. De plus, ils ne voient jamais l'en- Set-Cookietête que s'ils analysent et exécutent le JavaScript en premier lieu et font la demande AJAX. C'est beaucoup, beaucoup plus de travail que la plupart des spammeurs ne sont prêts à passer, d'autant plus que le travail ne s'applique qu'à un seul site. Le plus gros inconvénient est que toute personne avec JavaScript désactivé ou les cookies désactivés est marquée comme spam potentiel. Ce qui signifie que les files d'attente de modération sont toujours une bonne idée.

En théorie, cela pourrait être qualifié de sécurité par l'obscurité, mais en pratique, c'est excellent.

Je n'ai jamais vu un spammeur faire l'effort de briser cette technique, mais peut-être qu'une fois tous les deux mois, je reçois une entrée de spam sur le sujet à la main, et c'est un peu étrange.

Bob Aman
la source
5

1) Solveurs humains

Toutes les solutions mentionnées ici sont contournées par l'approche des solveurs humains. Un spambot professionnel conserve des centaines de connexions et lorsqu'il ne peut pas résoudre CAPTCHA lui-même, il transmet la capture d'écran aux solveurs humains distants.

Je lis souvent que les solveurs humains de CAPTCHA enfreignent les lois. Eh bien, c'est écrit par ceux qui ne savent pas comment fonctionne cette industrie (du spam).
Les solveurs humains n'interagissent pas directement avec les sites qu'ils résolvent CAPTCHA. Ils ne savent même pas à partir de quels sites les CAPTCHA ont été prélevés et envoyés. Je connais des dizaines (voire des centaines) d'entreprises ou de sites Web offrant des services de solveurs humains, mais pas un seul pour l'interaction directe avec les cartes en panne.
Ces dernières ne contreviennent à aucune loi, la résolution de CAPTCHA est donc une entreprise entièrement légale (et officiellement enregistrée). Ils n'ont pas d'intention criminelle et pourraient, par exemple, avoir été utilisés pour des tests à distance, des enquêtes, des tests de concept, des prototypes, etc.

2) Spam contextuel

Les bots AI (Artificial Intelligent) déterminent les contextes et maintiennent des dialogues sensibles au contexte à différents moments à partir d'adresses IP différentes (de différents pays). Même les auteurs de blogs ne comprennent souvent pas que les commentaires proviennent de robots. Je n'entrerai pas dans beaucoup de détails mais, par exemple, les bots peuvent webscraper les dialogues humains, les stocker dans la base de données et les réutiliser simplement (phrase par phrase), afin qu'ils ne soient pas détectables comme spam par un logiciel ou même par des humains.

La réponse la plus votée disant:

  • * "La théorie étant que:
    • Un robot spam ne prend pas en charge JavaScript et soumet ce qu'il voit
    • Si le bot prend en charge JavaScript, il soumettra le formulaire instantanément
    • Le commentateur a au moins lu une partie de la page avant de poster "*

ainsi la réponse honeypot et la plupart des réponses dans ce fil sont tout simplement faux.
Je suppose que ce sont des approches condamnées aux victimes

La plupart des spambots utilisent des navigateurs locaux et distants compatibles avec javascript (patchés et gérés) provenant de différentes adresses IP (de différents pays) et ils sont assez intelligents pour contourner les pièges à miel et les pots à miel.

Le problème différent est que même les propriétaires de blogs ne peuvent pas fréquemment détecter que les commentaires proviennent du robot car ils proviennent vraiment de dialogues humains et de commentaires récoltés à partir d'autres forums Web (forums, commentaires de blog, etc.)

3) Nouvelle approche conceptuelle

Désolé, j'ai supprimé cette partie comme précipitée

Gennady Vanin Геннадий Ванин
la source
1
Vous avez décrit le problème avec presque toutes les réponses sur ce fil. Ils seraient tous vaincus rapidement s'ils n'étaient pas exclusifs à un petit site Web. Si l'un d'eux était utilisé sur un grand site Web ou sur un certain nombre de petits sites Web (par exemple en tant que plugin Wordpress), ils seraient vaincus en une journée. Ce ne sont vraiment pas des CAPTCHAS, mais des cas chanceux de sécurité par l'obscurité. Vous avez également raison; le spam moderne met des commentaires que même moi, je ne peux pas reconnaître comme spam. J'ai abandonné CAPTCHA et j'utilise plutôt Mollom. Crowdsourcing spam est une meilleure approche à mon humble avis.
Dan
5

En fait, cela pourrait être une idée d'avoir un ensemble de captcha lié à la programmation. Par exemple:

Captcha

Il y a la possibilité que quelqu'un construise un vérificateur de syntaxe pour contourner cela, mais c'est beaucoup plus de travail pour contourner un captcha. Mais vous avez l'idée d'avoir un captcha apparenté.

Ross
la source
5
Sauf: sauriez-vous que la réponse à l'exemple de question (au cas où quelqu'un tomberait dessus plus tard et que l'image ne serait pas là: "Combien d'erreurs de syntaxe PHP dans $var == array(1 = 'one');;") est 1, non 3? (Sérieusement. Essayez $var == array(1 => 'one');;) ^ _ ~
pinkgothic
Hé, ça fait assez longtemps que je ne me souviens pas avoir fait cette image. Vous avez bien sûr raison, et je ne pense pas que ce serait très bien comme captcha - mais peut-être comme condition d'entrée pour un forum de programmation.
Ross
4

Je dois admettre que je n'ai aucune expérience de la lutte contre les spambots et je ne sais pas vraiment à quel point ils sont sophistiqués. Cela dit, je ne vois rien dans l'article jQuery qui ne pourrait pas être accompli uniquement sur le serveur.

Pour reformuler le résumé de l'article jQuery:

  1. Lors de la génération du formulaire de contact sur le serveur ...
  2. Prenez l'heure actuelle.
  3. Combinez cet horodatage, plus un mot secret, et générez un `` hachage '' de 32 caractères et stockez-le sous forme de cookie sur le navigateur du visiteur.
  4. Stockez le hachage ou l'horodatage «token» dans une balise de formulaire cachée.
  5. Lorsque le formulaire est renvoyé, la valeur de l'horodatage sera comparée au «jeton» de 32 caractères stocké dans le cookie.
  6. Si les informations ne correspondent pas, sont manquantes ou si l'horodatage est trop ancien, arrêtez l'exécution de la demande ...

Une autre option, si vous souhaitez utiliser l'image traditionnelle CAPTCHA sans la surcharge de leur génération à chaque demande est de les pré-générer hors ligne. Il vous suffit ensuite d'en choisir au hasard un à afficher avec chaque formulaire.

Peter
la source