Approcci pratici CAPTCHA non basati su immagini?


318

Sembra che aggiungeremo il supporto CAPTCHA a StackTranslate.it. Ciò è necessario per prevenire bot, spammer e altre attività di script dannoso. Vogliamo solo esseri umani pubblicare o modificare cose qui!

Useremo un CAPTCHA JavaScript (jQuery) come prima linea di difesa:

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

Il vantaggio di questo approccio è che, per la maggior parte delle persone, il CAPTCHA non sarà mai visibile!

Tuttavia, per le persone con JavaScript disabilitato, abbiamo ancora bisogno di un fallback ed è qui che diventa complicato.

Ho scritto un controllo CAPTCHA tradizionale per ASP.NET che possiamo riutilizzare.

CaptchaImage

Tuttavia, preferirei utilizzare qualcosa di testuale per evitare il sovraccarico di creare tutte queste immagini sul server con ogni richiesta.

Ho visto cose come ..

  • Captcha di testo ASCII: \/\/(_)\/\/
  • puzzle matematici: quanto fa 7 meno 3 volte 2?
  • domande trivia: cosa ha un sapore migliore, un rospo o un ghiacciolo?

Forse sto solo inclinandomi verso i mulini a vento qui, ma mi piacerebbe avere un <noscript>CAPTCHA compatibile meno intensivo in termini di risorse, se possibile.

Idee?


16
Non è necessario creare effettivamente un'immagine sul server. Devi solo gestire la richiesta. Ad esempio <img src = "generateImage.aspx? Guid = blah">
Brian R. Bondy,

58
Le domande trivia sono inclini a pregiudizi culturali (pensa a un ragazzo francese che risponde alla tua domanda ...). Inoltre, possono affrontare utenti il ​​cui inglese non è nativo. Inoltre, possono essere facilmente rotti usando la forza bruta (hai solo ~ 2 ^ # _ opzioni OfQuestions).
Adam Matan,

72
Inoltre, cosa diavolo è un ghiacciolo?
Fraser,

57
Secondo Wolfram Alpha, "ciò che è 7 meno 3 volte 2" è 1. Ho pensato che fosse 8. Penso che tu abbia appena inventato l'anti-captcha.
Mike Robinson,

50
@ Mike Robinson: penso che i programmatori dovrebbero conoscere la precedenza dell'operatore in NORMAL day use =)
Gnark,

Risposte:


205

Un metodo che ho sviluppato e che sembra funzionare perfettamente (anche se probabilmente non ricevo lo stesso spam di commenti come te), è quello di avere un campo nascosto e riempirlo con un valore falso, ad esempio:

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

Ho quindi un pezzo di JavaScript che aggiorna il valore ogni secondo con il numero di secondi per cui è stata caricata la pagina:

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

Quindi quando il modulo viene inviato, se il valore antispam è ancora "lalalala", allora lo segnalo come spam. Se il valore antispam è un numero intero, controllo per vedere se è al di sopra di qualcosa come 10 (secondi). Se è inferiore a 10, lo contrassegno come spam, se è 10 o più, lo lascio passare.

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

La teoria è che:

  • Un bot di spam non supporterà JavaScript e invierà ciò che vede
  • Se il bot supporta JavaScript, invierà immediatamente il modulo
  • Il commentatore ha almeno letto parte della pagina prima di pubblicare

Lo svantaggio di questo metodo è che richiede JavaScript e, se non hai JavaScript abilitato, il tuo commento verrà contrassegnato come spam, tuttavia rivedo i commenti contrassegnati come spam, quindi questo non è un problema.

Risposta ai commenti

@MrAnalogy: l'approccio lato server sembra abbastanza una buona idea ed è esattamente lo stesso di farlo in JavaScript. Ottima scelta.

@AviD: Sono consapevole che questo metodo è soggetto ad attacchi diretti, come ho già detto sul mio blog . Tuttavia, difenderà dal tuo bot di spam medio che sottopone alla cieca i rifiuti in qualsiasi forma riesca a trovare.


45
VERSIONE CHE FUNZIONA SENZA JAVASCRIPT Che ne dici se hai fatto questo con ASP, ecc. E hai avuto un timestamp per quando la pagina del modulo è stata caricata e poi confrontata con l'ora in cui è stato inviato il modulo. Se ElapsedTime <10 sec, probabilmente è spam.
Clay Nichols,

28
Ovviamente molto aggirabile, se un utente malintenzionato si preoccupa di guardarlo. Mentre sono sicuro che tu ne sia consapevole, immagino tu stia supponendo che non si preoccupino ... Beh, se non è un sito di alcun valore, allora hai ragione e loro non si preoccuperanno - ma se lo è, allora lo faranno, e
aggirarlo

48
Ecco una svolta su questo che uso. Imposta ora il valore nascosto su un tempo crittografato. Al ritorno, verifica che siano trascorsi tra 10 secondi e 10 minuti. Questo sventa i trucchi che tenterebbero di inserire un valore sempre valido.
Tim Scott,

7
A tutti coloro che hanno sottolineato che i robot potrebbero superare ... Questo lo so come ho sottolineato nella risposta. È un metodo molto semplice per fermare il tuo bot medio e gli utenti annoiati. Attualmente lo sto usando sul mio blog e finora ha avuto successo al 100%.
GateKiller

8
Penso che sia meglio iniziare con test facili da bypassare per vedere se sono adeguati.
pbreitenbach,

211

13
Quello è fantastico. Il link al sito è random.irb.hr/signup.php . A volte è molto più semplice
Marcio Aguiar l'

22
L'unico problema è che è davvero difficile per la maggior parte degli umani, ma i computer di solito non hanno problemi con questo.
Tim Matthews,

7
Credo che la risposta a questo problema sia -3?
dancavallaro,

2
@Erik, non proprio. Mantiene anche coloro che hanno dottorati in informatica ma non vogliono preoccuparsi.
BobbyShaftoe,

28
-3 sembra corretto. Ricordo di aver usato questo sito Web per la ricerca qualche tempo fa e quando sono arrivato al Captcha ero così felice perché era divertente e diverso. Serve per l'accesso a un generatore di numeri casuali quantistici usando una vera sorgente di decadimento radioattivo.
Alex,

57

A meno che non mi manchi qualcosa, cosa c'è che non va nell'uso di reCAPTCHA poiché tutto il lavoro viene svolto esternamente.

Solo un pensiero.


17
Re-captcha è ostile all'utente. Captchs è abbastanza male. Ma rendere più difficile per gli utenti ottenere alcuni piccoli benefici OCR è decisamente ostile.
pbreitenbach,

19
perché l'utente è ostile? lo spam è facile da usare?
Elzo Valugi

14
È ostile all'utente perché a volte le immagini sono difficili da decodificare anche per gli esseri umani e possono causare frustrazione negli utenti legittimi quando ciò accade. Vedi il link di Josh con i peggiori CAPTCHAS per alcuni esempi di immagini troppo difficili da decodificare.
Andrei Fierbinteanu,

4
@Andrei puoi sempre far reCAPTCHA caricare un'altra immagine se è troppo difficile per te.
mhitza,

23
reCAPTCHA va bene e implementa un'opzione di accessibilità a cui il 95% delle soluzioni locali non ci pensa nemmeno.
alxp,

42

Il vantaggio di questo approccio è che, per la maggior parte delle persone, il CAPTCHA non sarà mai visibile!

Mi piace questa idea, non c'è modo di agganciarci al sistema di rep? Voglio dire, chiunque abbia un rappresentante +100 probabilmente sarà un essere umano. Quindi, se hanno un rappresentante, non devi nemmeno preoccuparti di fare NIENTE in termini di CAPTCHA.

Quindi, se non lo sono, quindi inviarlo, sono sicuro che non ci vorranno molti post per arrivare a 100 e la community si tufferà all'istante su chiunque sembra spammare con tag offensivi, perché non aggiungere un link "segnala spam" che downmods di 200? Ottieni 3 di questi, sbloccato obiettivo dello spambot, ciao ciao;)

EDIT : Vorrei anche aggiungere, mi piace l'idea matematica per il CAPTCHA non immagine. O forse un semplice indovinello. Può rendere la pubblicazione ancora più interessante ^ _ ^


13
Cosa succede se vengono rubate le credenziali di un account con membri del karma elevato?
James McMahon,

20
@nemo Allora hai a che fare con esso. Ma pochissime ragioni per evitare una soluzione solo per questo motivo.
pbreitenbach,

Perché tutti vedrebbero lo spam e l'alto karma e saprebbero che un account è stato rubato.
hamstar,

37

Che dire di un captcha honeypot ?


4
Spiegazione di Honeypot Captcha (che sembra molto buono): i robot amano le forme. Compilano tutti i campi. Un Captcha honeypot include un campo NASCOSTO dai CSS in modo che solo i bot (e quelli con IE 3.0) lo vedano. Se è pieno, è un bot. Molto facile da implementare.
Clay Nichols,

5
Ancora una volta, banalmente aggirabile con un investimento di tempo minimo. È vero, riuscirai a bloccare alcuni scriptkiddie, ma se il tuo sito ha valore non è la tua principale minaccia.
AviD,

i captcha di honeypot sono dannosi per l'usabilità: gli screen reader non ignoreranno i campi dei moduli nascosti.
Bayard Randel,

Sì, è semplice da implementare e funziona davvero bene. L'accessibilità è l'unico vero problema.
meme,

6
l'accessibilità può essere semplicemente ignorata aggiungendo del testo:Hey, if youre a human, keep this field blank!
Strae

30

Evita i peggiori CAPTCHA di tutti i tempi .

La curiosità è OK, ma dovrai scrivere ognuno di essi :-(

Qualcuno dovrebbe scriverli.

Puoi fare domande trivia nello stesso modo in cui ReCaptcha stampa le parole. Offre due parole, una delle quali conosce la risposta, un'altra a cui non lo fa - dopo abbastanza risposte sulla seconda, ora conosce anche la risposta. Poni due domande trivia:

Una donna ha bisogno di un uomo come un pesce ha bisogno di un?

Arancia Arancia Arancia. Digita il verde.

Naturalmente, potrebbe essere necessario abbinarlo ad altre tecniche, come timer o segreti calcolati. Le domande dovrebbero essere ruotate / ritirate, quindi per mantenere l'offerta di domande è possibile aggiungere ad-hoc:

Inserisci la tua domanda ovvia:

Non hai nemmeno bisogno di una risposta; altri umani lo scopriranno. Potrebbe essere necessario consentire di contrassegnare le domande come "troppo difficili", come questa: "asdf ejflf asl; jf ei; fil; asfas".

Ora, per rallentare qualcuno che esegue un bot di gioco StackOverflow, devi ruotare le domande in base all'indirizzo IP, quindi lo stesso indirizzo IP non ottiene la stessa domanda fino a quando tutte le domande sono esaurite. Questo rallenta la costruzione di un dizionario di domande note, costringendo il proprietario umano dei robot a rispondere a tutte le tue domande trivia.


14
Fai solo attenzione alle domande trivia, poiché a volte possono essere facili per te e incredibilmente difficili per persone di diversi paesi che non hanno imparato l'inglese o per persone che provengono da culture diverse. Potrebbero arrabbiarsi se li costringi a usare il dizionario solo per accedere! O peggio ancora, smettono di usare il sito.
ya23,

14
"Una donna ha bisogno di un uomo come un pesce ha bisogno di un?" Allora, qual è la risposta a questa domanda?
Lotus Notes,

2
bicicletta. Citazione di Irina Dunn (resa popolare da Gloria Steinem).
webbiedave,

9
... come un pesce ha bisogno di una donna-pesce.
matt lohkamp,

28

L'ho visto una volta sul sito di un amico. Lo sta vendendo per 20 dollari. È 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'   

2
+1, anche se non credo che dovresti pagare per qualcosa del genere. Preferirei averlo costruito da zero.
Dalin Seivewright,

5
bello, ma avrebbe bisogno di una versione parlata anche per i non vedenti
pro

29
Il problema è che è più facile che un'immagine si rompa. Tutto quello che dovresti fare è leggerlo in un'immagine e hai un'immagine in bianco e nero perfetta su cui eseguire l'OCR.
Andrei Krotkov,

@Andrei, esiste una versione alternativa a questa, generata usando "figlet", questo può "raggruppare" i caratteri in modo che i caratteri captcha condividano i caratteri ASCII. Questi sono un po 'più difficili per l'OCR.
Pasi Savolainen,

58
Può essere pubblicità ma a) è una risposta valida alla domanda eb) l'autore afferma chiaramente che questo è di un amico (il che significa che afferma chiaramente di essere di parte), quindi non vedo alcun problema con la risposta .
Michael Stum

28

CAPTCHA, nella sua attuale concettualizzazione, è rotto e spesso facilmente aggirabile. NESSUNA delle soluzioni esistenti funziona in modo efficace: GMail ha successo solo nel 20% dei casi.

In realtà è molto peggio di quello, dal momento che quella statistica utilizza solo l'OCR e ci sono altri modi per aggirarlo, ad esempio i proxy CAPTCHA e le fattorie CAPTCHA. Di recente ho tenuto un discorso sull'argomento presso OWASP, ma il ppt non è ancora online ...

Sebbene CAPTCHA non sia in grado di fornire una protezione effettiva in qualsiasi forma, può essere sufficiente per le tue esigenze, se ciò che desideri è bloccare la spazzatura casuale. Ma non fermerà nemmeno gli spammer semi-professionali.

In genere, per un sito con risorse di qualsiasi valore da proteggere, è necessario un approccio a tre punte:

  • Limitare le risposte solo agli utenti autenticati, non consentire post anonimi.
  • Ridurre al minimo (non prevenire) i pochi messaggi spazzatura di utenti autenticati, ad esempio basati sulla reputazione. Un moderatore umano può anche aiutare qui, ma poi hai altri problemi - vale a dire, allagando (o addirittura affogando) il moderatore, e alcuni siti preferiscono l'apertura ...
  • Utilizzare la logica euristica sul lato server per identificare il comportamento simile allo spam o un comportamento migliore non umano.

CAPTCHA può aiutare un pochino con il secondo polo, semplicemente perché cambia l'economia - se sono presenti gli altri poli, non vale più la pena preoccuparsi di sfondare il CAPTCHA (costo minimo, ma comunque un costo) per riuscire in tale una piccola quantità di spam.

Ancora una volta, non tutto il tuo spam (e altri rifiuti) sarà generato dal computer - usando il proxy CAPTCHA o la fattoria i cattivi possono avere persone vere che ti spammano.


Il proxy CAPTCHA è quando forniscono la tua immagine agli utenti di altri siti, ad esempio porno, giochi, ecc.

Una fattoria CAPTCHA ha molti lavoratori economici (India, estremo oriente, ecc.) Che li risolvono ... in genere tra 2-4 $ per 1000 captcha risolti. Recentemente ho visto un post per questo su Ebay ...


I proxy e le fattorie non lo rompono o aggirano il "CAPTCHA" mentre vengono risolti dagli umani. In effetti la loro stessa esistenza è una testimonianza del fatto che gli attuali metodi funzionano! CAPTCHA non significa 'Il tipo di sottomissione che desidero' solo 'È una sottomissione umana' ...
Fraser

10
Esattamente! Ma i CAPTCHA sono spesso usati per prevenire i "robot" - e non importa se questi robot sono umani o no, l'intento è quello di impedire un uso non personale di massa. Questo dimostra solo quello che dico sempre, CAPTCHA risolve il problema sbagliato (e lo fa così male) ...
AviD

Ci sono molte situazioni in cui captcha va bene. Il punto è che i proprietari di siti Web dovrebbero scegliere una soluzione che bilanci l'esperienza dell'utente con il controllo. Per alcuni, nessun captcha. Per altri, captcha. Per altri ancora, qualcos'altro. Ma eliminare del tutto captcha non è intelligente.
pbreitenbach,

1
Il problema deriva dal pensare che l'inserimento di CAPTCHA ti darà quel controllo. Non lo fa. Neanche un po 'sostanziale. Ci sono alcune rare situazioni in cui può fornire un certo valore, ma NON "controllo". (Ho spesso menzionato il CAPTCHA qui, insieme agli altri meccanismi dà quel qualcosa in più per aiutare a rendere lo spamming non utile.)
AviD

27

Pertanto, CAPTCHA è obbligatorio per tutti gli utenti tranne i moderatori. [1]

È incredibilmente stupido. Quindi ci saranno utenti che possono modificare qualsiasi post sul sito ma non pubblicare post senza CAPTCHA? Se si dispone di un rappresentante sufficiente per il downgrade dei post, si dispone di un rappresentante sufficiente per pubblicare post senza CAPTCHA. Rendilo più alto se devi. Inoltre ci sono molti metodi di rilevamento dello spam che puoi utilizzare senza il riconoscimento delle immagini, quindi anche per gli utenti non registrati non sarebbe mai necessario compilare quei moduli CAPTCHA dimenticati da Dio.



20

Che dire dell'utilizzo della community stessa per ricontrollare che tutti qui sono umani, cioè qualcosa come una rete di fiducia? Per trovare una persona veramente degna di fiducia per avviare il Web, suggerisco di usare questo CAPTCHA per essere sicuro che sia assolutamente e al 100% umano.

Rapidshare CAPTCHA - Ipotesi di Riemann http://codethief.eu/kram/_/rapidshare_captcha2.jpg

Certamente, c'è una piccola possibilità che sarebbe troppo impegnato a preparare il suo discorso Fields Medal per aiutarci a costruire la rete di fiducia ma bene ...


17

Asirra è il captcha più adorabile di sempre.


All'inizio l'ho letto come "Asirra è il captcha più adottabile di sempre". che mi ha gettato leggermente. Sono d'accordo che è probabilmente il più adorabile, ma proprio come afferma sul sito, uno scrittore di bot potrebbe semplicemente salvare tutte le immagini (potrebbe richiedere un po 'di tempo), classificarle, quindi il bot lo spezzerebbe facilmente.
Dalin Seivewright,

7
come può un cieco rispondere a questi?
BBetances,

è quasi uguale a reCAPTCHA. stiamo cercando un approccio meno irritante e non basato sull'immagine.
AhmetB - Google

Devo dire che usano un numero piuttosto elevato di immagini per controllare la loro demo.
pimvdb,

1
Avevo 3 tentativi prima di ammettere che sono un essere umano - presumibilmente perché alcune delle immagini sembravano solo grandi palle di pelo.
Kramii,

16

Basta fare in modo che l'utente risolva semplici espressioni aritmetiche:

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

eccetera.

Una volta che gli spammer prendono piede, dovrebbe essere abbastanza facile individuarli. Ogni volta che uno spammer rilevato richiede, alternare tra i seguenti due comandi:

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

Ovviamente, il motivo per cui questo funziona è perché tutti gli spammer sono abbastanza intelligenti da usare evalper risolvere il captcha in una riga di codice.


1
Anche +1 per crudeltà, ma volevo solo aggiungere che non avrebbe funzionato con me, utilizzo il provider di valutazione VB.NET e controllo il formato c: o rm -rf, newline, due punti, punti e virgola, ecc. È necessario essere un po 'più inventivo di così. Inoltre, non ho mai lasciato eseguire gli script Linux come root, motivo per cui neanche questo avrebbe funzionato.
Stefan Steiger,

@Longpoke Semplicemente non funzionerà. Sulla maggior parte degli Unix moderni c'è una protezione integrata rmcontro il correre con -rf /.
hamstergene,

lol sarebbe divertente se lo dicessi solo per farmi provare. Forse invece rm -rf / * avrebbe funzionato. Comunque ci sono molte altre cose cattive che puoi fare.
L̲̳o̲̳̳n̲̳̳g̲̳̳p̲̳o̲̳̳k̲̳̳e̲̳̳

Questo presuppone anche che le persone non conoscano Python literal_eval(o equivalenti in altre lingue), il che è un fatto piuttosto triste.
Petr Viktorin,

rm -rf ~sarebbe distruttivo se lo script fosse in esecuzione sulla macchina personale di qualcuno
kirb

16

Ho usato la seguente tecnica semplice, non è infallibile. Se qualcuno vuole davvero bypassare questo, è facile guardare alla fonte (cioè non adatto a Google CAPTCHA) ma dovrebbe ingannare la maggior parte dei robot.

Aggiungi 2 o più campi modulo come questo:

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

Quindi utilizzare CSS per nasconderli:

.hideme {
    display: none;
}

Al momento dell'invio, verifica se tali campi del modulo contengono dati, se non riescono a inviare il modulo. Il ragionamento è che i robot leggeranno l'HTML e tenteranno di riempire tutti i campi del modulo mentre gli umani non vedranno i campi di input e li lasceranno soli.

Ovviamente ci sono molte altre cose che puoi fare per renderlo meno sfruttabile, ma questo è solo un concetto di base.


7
"honeypot captcha"
mpen

15

Sebbene tutti dovremmo conoscere la matematica di base, il puzzle di matematica potrebbe causare confusione. Nel tuo esempio sono sicuro che alcune persone risponderebbero con "8" anziché "1".

Sarebbe adatta una semplice stringa di testo con caratteri casuali evidenziati in grassetto o corsivo? L'utente deve solo inserire le lettere in grassetto / corsivo come CAPTCHA.

Ad esempio , sdfa t werwe a jh c sad k oghvefdhrffghlfgdhowfgh

In questo caso "stack" sarebbe il CAPTCHA. Ci sono ovviamente numerose varianti su questa idea.

Modifica: esempi di variazioni per affrontare alcuni dei potenziali problemi identificati con questa idea:

  • usando lettere colorate in modo casuale anziché grassetto / corsivo.
  • usando ogni seconda lettera rossa per il CAPTCHA (riduce la possibilità che i bot identifichino le lettere diversamente formattate per indovinare il CAPTCHA)

1
Mi piace questa, ad esempio "inserisci la parola scritta dalla terza lettera rossa sottolineata, dalla quarta lettera in grassetto verde e dalla quinta lettera in blu non grassetto".
An̲̳̳drew,

9
Quell'esempio sopra "ssdfatwerweajhcsadkoghvefdhrffghlfgdhowfgh" potrebbe essere risolto da un semplice regex
alex

Questo non sarebbe utile per gli utenti con acalcula. Ci sono scienziati con questa afflizione, quindi non è irragionevole che ci possano essere programmatori.
BobbyShaftoe,

Ottima idea! Forse anche giocando con il cambiamento dei colori di primo piano / sfondo, puoi ottenere qualcosa che mostra il testo facilmente visibile agli umani, ma troppo casuale per i robot? Naturalmente questo è più difficile per le persone daltoniche :-(
Shalom Craimer,

2
L'uso del colore potrebbe complicare le cose, perché sarebbe necessario supportare diverse forme di daltonismo. Altrimenti sembra abbastanza buono.
KarstenF,

12

Sebbene questa discussione simile sia stata avviata:

Stiamo provando questa soluzione su una delle nostre applicazioni di data mining frequentemente:

Un migliore controllo CAPTCHA (Look Ma - NO IMMAGINE!)

Puoi vederlo in azione nella nostra Ricerca ispezioni edifici .

Puoi visualizzare Source e vedere che CAPTCHA è solo HTML.


Funzionerà per NOW, ma non appena un numero sufficiente di siti utilizzerà un approccio del genere, gli spammer renderizzeranno l'html su un'immagine e OCR il risultato.
ordito il

12

So che nessuno leggerà questo, ma per quanto riguarda il cane o il gatto CAPTCHA?

Devi dire quale è un gatto o un cane, le macchine non possono farlo. Http://research.microsoft.com/asirra/

È bello ..


4
I computer non possono farlo. Né possono i ciechi.
TRiG

1
Né a me, quando lo guardo su un monitor ad alta risoluzione. Quelle immagini sono minuscole. Anche uno di loro era di una creatura non identificabile dietro una staccionata bianca.
jsims281,

10

Uso solo semplici domande alle quali chiunque può rispondere:

Di che colore è il cielo?
Di che colore è un'arancia?
Di che colore è l'erba?

Fa in modo che qualcuno debba programmare un bot sul tuo sito, il che probabilmente non vale la pena. Se lo fanno, basta cambiare le domande.


Cyc può risolvere questo banalmente ... ed è open source. Richiederebbe al massimo un paio d'ore di scripting da implementare.
rmeador,

questo è usato anche dal forum di Ubuntu. mi piace e le implementazioni di controlli come "2 + 2 =?" o "qual è la prima lettera dell'alfabeto" è molto semplice.
pistacchio,

8
Le risposte: 1) In questo momento, un azzurro, più tardi, rosso, poi nero con sentori di arancione vicino al centro. 2) arancione, a meno che non sia ammuffito, quindi è verde o nero o bianco. 3) marrone, nel sud della California, a meno che tu non sia a Beverly Hills, allora è verde.
mmr

52
@mmr Vedi, questo è in realtà un vantaggio del sistema, impedisce alle smartasses di pubblicare commenti ...
martedì

2
La seconda e la terza risposta sono distorte verso le persone che vivono nei deserti o Baltimora.
Mike Robinson,

10

Personalmente non mi piace CAPTCHA che danneggia l'usabilità e non risolve il problema di sicurezza nel rendere invalidi gli utenti validi.

Preferisco i metodi di rilevamento dei bot che è possibile eseguire sul lato server. Dato che hai utenti validi (grazie a OpenID) puoi bloccare quelli che non si "comportano", devi solo identificare i pattern di un bot e abbinarli ai pattern di un utente tipico e calcolare la differenza.

Davies, N., Mehdi, Q., Gough, N.: Creazione e visualizzazione di un NPC intelligente mediante motori di gioco e strumenti di intelligenza artificiale http://www.comp.glam.ac.uk/ASMTA2005/Proc/pdf/game-06 .PDF

Golle, P., Ducheneaut, N.: Impedire ai robot di giocare ai giochi online <- ACM Portal

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

Sicuramente la maggior parte di questi riferimenti punta al rilevamento di bot per videogiochi, ma è perché quello era l'argomento del documento del nostro gruppo intitolato Robot Wars: An In-Game Exploration of Robot Identification . Non è stato pubblicato o altro, solo qualcosa per un progetto scolastico. Posso inviarti un'e-mail se sei interessato. Il fatto è che anche se si basa sul rilevamento di bot di videogiochi, puoi generalizzarlo sul web perché c'è un utente collegato a schemi di utilizzo.

Sono d'accordo con il metodo di MusiGenesis di questo approccio perché è quello che uso sul mio sito Web e funziona decentemente bene. Il processo CAPTCHA invisibile è un modo decente per bloccare la maggior parte degli script, ma ciò non impedisce ancora a uno sceneggiatore di decodificare il metodo e "falsificare" i valori che stai cercando in JavaScript.

Dirò che il metodo migliore è 1) stabilire un utente in modo che tu possa bloccare quando sono cattivi, 2) identificare un algoritmo che rileva modelli tipici rispetto a modelli non tipici di utilizzo del sito Web e 3) bloccare tale utente di conseguenza.


Perché un bot non può registrare OpenID? Un utente malintenzionato deve solo creare il proprio editore OpenID.
rjmunro,

Sì @rjmunro, e questa è una buona cosa. La difficoltà di Internet è l'identificazione di utenti anonimi. Se un bot registra un OpenID e identifichi l'utente OpenID come bot, puoi chiuderlo. Non è più anonimo. Ciò non impedisce la registrazione multipla da parte dello stesso provider, ma è possibile arrestarlo per consentire i bot. L'obiettivo è rimuovere l'anonimato di Internet nel miglior modo possibile.
jwendl,

10

Ho alcune idee a riguardo che mi piace condividere con te ...

Prima idea per evitare l'OCR

Un captcha che ha una parte nascosta dall'utente, ma l'immagine completa è il due codice insieme, quindi i programmi OCR e le farm captcha leggono l'immagine che include la parte visibile e quella nascosta, provano a decodificarli entrambi e non riescono a inviarli. .. - Ho tutto pronto per risolverlo e lavoro online.

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

Seconda idea per renderlo più semplice

Una pagina con molte parole che l'uomo deve selezionare quella giusta. Ho anche creato questo, è semplice. Le parole sono immagini selezionabili e l'utente deve fare clic su quella giusta.

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

Terza idea senza immagini

Lo stesso del precedente, ma con div e testi o piccole icone. L'utente deve fare clic solo su una div / lettera / immagine corretta, qualunque cosa.

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

Idea finale - Lo chiamo CicleCaptcha

E un altro mio CicleCaptcha , l'utente deve individuare un punto su un'immagine. Se lo trova e fa clic su di esso, allora è una persona, le macchine probabilmente falliscono o devono creare un nuovo software per trovare un modo con questo.

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

Tutti i critici sono i benvenuti.


Re-captcha ha un text to speech per le sue parole. Potrebbe dirti dove fare clic.
Robert P,

@RobertP Fare clic quando si è ipovedenti è come sparare quando si è ipovedenti ... "Mirare solo alla testa".

8
@pst "Un po 'a sinistra. Esatto, un po' di più. Bene. Bene. Ora di nuovo. Su. No, su dall'altra parte. Sì, ce l'hai. Solo un po 'di più. Sì. Solo un po' di più. Quasi lì. Quasi lì ... quasi ... quasi ... CAPTCHA !!! "
Robert P,


7

Di recente, ho iniziato ad aggiungere un tag con il nome e l'id impostato su "messaggio". L'ho impostato su nascosto con CSS (display: none). I robot spam lo vedono, lo compilano e inviano il modulo. Sul lato server, se l'area di testo con il nome ID è compilata, segnalo come spam.

Un'altra tecnica su cui sto lavorando è generare casualmente nomi e ID, alcuni dei quali sono controlli antispam e altri campi regolari.

Questo funziona molto bene per me e non ho ancora ricevuto spam di successo. Tuttavia, ottengo molti meno visitatori dei miei siti :)


Usare css per nascondere il campo del modulo e affermare che è vuoto ha funzionato anche per me. Non a prova di errore ma è una buona opzione.
Chris,

Tecnica 1: Honeypot
kevinji,

6

L'aritmetica molto semplice è buona. I non vedenti saranno in grado di rispondere. (Ma come ha detto Jarod, fai attenzione alla precedenza dell'operatore.) Incontro qualcuno potrebbe scrivere un parser, ma rende lo spamming più costoso.

Sufficientemente semplice e non sarà difficile codificarlo. Vedo due minacce qui:

  1. spambots casuali e gli spambots umani che potrebbero sostenerli; e
  2. robot creati per il gioco Stack Overflow

Con semplici aritmetiche, potresti eliminare la minaccia n. 1, ma non la minaccia n. 2.


Un parser, suppongo, è significativamente più semplice che scrivere un cracker di captcha di immagini. Ricorda, la cosa più semplice che offri agli utenti è ciò che uno spambot probabilmente utilizzerà. Purtroppo, il captcha no-JS deve essere più difficile.
stalepretzel,

5

Che cosa succede se hai usato una combinazione delle idee captcha che avevi (scegline una qualsiasi o selezionane una a caso):

  • Captcha di testo ASCII: // (_) //
  • puzzle matematici: quanto fa 7 meno 3 volte 2?
  • domande trivia: cosa ha un sapore migliore, un rospo o un ghiacciolo?

con l'aggiunta di posizionare lo stesso captcha esatto in una sezione nascosta CSS della pagina - l'idea honeypot. In questo modo, avresti un posto dove ti aspetteresti la risposta corretta e un altro in cui la risposta dovrebbe essere invariata.


1
"Ciò che ha un sapore migliore" è abbastanza soggettivo, secondo me. Le persone che escono su un arto per quanto riguarda il gusto saranno interpretate come un robot. Inoltre, con solo due risposte, la possibilità di passare come bot è del 50%.
pimvdb,

Vero sulla parte soggettiva, ma il particolare era dalla domanda originale. Il mio punto era usare tutti e tre i tipi (o più) in modo casuale. Inoltre, la possibilità di passare è solo del 50% se la risposta è a scelta multipla. Se l'utente ha digitato la parola senza indicare le possibili risposte in un elenco, diventa molto più difficile per un bot scegliere le parole corrette nella domanda / risposta.
TheEmirOfGroofunkistan

5

Ho avuto risultati sorprendentemente buoni con un semplice campo "Lascia vuoto questo campo:". I robot sembrano riempire tutto, in particolare se si chiama il campo qualcosa come "URL". In combinazione con un rigoroso controllo dei referrer, non ho ancora avuto un bot per superarlo.

Per favore, non dimenticare l'accessibilità qui. I captcha sono notoriamente inutilizzabili per molte persone che usano gli screen reader. Semplici problemi di matematica o curiosità molto banali (mi è piaciuta la domanda "di che colore è il cielo") sono molto più amichevoli per gli utenti ipovedenti.


5

Il testo semplice suona alla grande. Corrompi la comunità per fare il lavoro! Se ritieni, come me, che i punti di reputazione SO misurino l'impegno di un utente ad aiutare il sito ad avere successo, è del tutto ragionevole offrire punti reputazione per aiutare a proteggere il sito dagli spammer.

Offri +10 reputazione per ogni contributo di una semplice domanda e una serie di risposte corrette. La domanda dovrebbe essere opportunamente lontana (modificare la distanza) da tutte le domande esistenti e la reputazione (e la domanda) dovrebbe gradualmente scomparire se le persone non possono rispondere. Supponiamo che se il tasso di errore nelle risposte esatte sia superiore al 20%, quindi il mittente perde un punto reputazione per risposta errata, fino a un massimo di 15. Quindi, se si invia una domanda negativa, si ottiene +10 ora ma alla fine si netto -5. O forse ha senso chiedere a un campione di utenti di votare se la domanda captcha è buona.

Infine, come il limite giornaliero, supponiamo che nessun utente possa guadagnare più di 100 reputazione inviando domande captcha. Questa è una ragionevole limitazione del peso attribuito a tali contributi e può anche aiutare a impedire agli spammer di seminare domande nel sistema. Ad esempio, è possibile scegliere domande non con uguale probabilità ma con una probabilità proporzionale alla reputazione del mittente. Jon Skeet, per favore non inviare domande :-)


5

Effettuare una query AJAX per un nonce crittografico sul server. Il server invia una risposta JSON contenente il nonce e imposta anche un cookie contenente il valore nonce. Calcola l'hash SHA1 del nonce in JavaScript, copia il valore in un campo nascosto. Quando l'utente POST invia il modulo, ora restituisce il cookie con il valore nonce. Calcola l'hash SHA1 del nonce dal cookie, confronta con il valore nel campo nascosto e verifica di aver generato quel nonce negli ultimi 15 minuti (memcached è buono per questo). Se tutti questi controlli passano, pubblica il commento.

Questa tecnica richiede che lo spammer si sieda e capisca cosa sta succedendo, e una volta che lo fanno, devono ancora rispondere a più richieste e mantenere lo stato dei cookie per ottenere un commento. Inoltre vedono sempre l' Set-Cookieintestazione solo se analizzano ed eseguono JavaScript in primo luogo e fanno la richiesta AJAX. Questo è molto, molto più lavoro di quello che la maggior parte degli spammer è disposto a passare, soprattutto perché il lavoro si applica solo a un singolo sito. Il più grande svantaggio è che chiunque abbia JavaScript disattivato o i cookie disabilitati viene contrassegnato come potenziale spam. Ciò significa che le code di moderazione sono ancora una buona idea.

In teoria, questo potrebbe qualificarsi come sicurezza attraverso l'oscurità, ma in pratica è eccellente.

Non ho mai visto una volta uno spammer sforzarsi di interrompere questa tecnica, anche se forse una volta ogni due mesi ricevo una voce di spam sull'argomento inserita a mano, e questo è un po 'inquietante.


5

1) Solutori umani

Tutte le soluzioni qui menzionate sono eluse dall'approccio dei solutori umani. Uno spambot professionale mantiene centinaia di connessioni e quando non è in grado di risolvere CAPTCHA stesso, passa lo screenshot ai solutori umani remoti.

Ho letto spesso che i risolutori umani dei CAPTCHA infrangono le leggi. Bene, questo è scritto da coloro che non sanno come funziona questo settore (spamming).
I solutori umani non interagiscono direttamente con i siti che risolvono i CAPTCHA. Non sanno nemmeno da quali siti i CAPTCHA sono stati prelevati e inviati. Sono a conoscenza del fatto che dozzine (se non centinaia) di aziende o / e siti Web che offrono servizi di risolutore umano, ma non uno solo per l'interazione diretta con le schede, vengono infranti.
Quest'ultimo non viola alcuna legge, quindi la soluzione CAPTCHA è completamente legale (e ufficialmente registrata) per le aziende. Non hanno intenzioni criminali e potrebbero, ad esempio, essere stati utilizzati per test remoti, indagini, prove di concetti, prototipi, ecc.

2) Spam basato sul contesto

I robot AI (Artificial Intelligent) determinano i contesti e mantengono dialoghi sensibili al contesto in momenti diversi da indirizzi IP diversi (di paesi diversi). Anche gli autori di blog spesso non riescono a capire che i commenti provengono da bot. Non entrerò in molti dettagli, ma, ad esempio, i robot possono intrecciare dialoghi umani, archiviarli nel database e quindi semplicemente riutilizzarli (frase per frase), quindi non sono rilevabili come spam da software o persino da umani.

La risposta più votata che dice:

  • * "La teoria è che:
    • Un bot di spam non supporterà JavaScript e invierà ciò che vede
    • Se il bot supporta JavaScript, invierà immediatamente il modulo
    • Il commentatore ha almeno letto parte della pagina prima di pubblicare "*

così come la risposta di Honeypot e la maggior parte delle risposte in questa discussione sono semplicemente sbagliate.
Oserei dire che sono approcci condannati alle vittime

La maggior parte degli spambots funziona attraverso browser locali e remoti compatibili con javascript (patchati e gestiti) da IP diversi (di diversi paesi) e sono abbastanza intelligenti per aggirare trappole e vasi di miele.

Il diverso problema è che anche i proprietari di blog non possono rilevare frequentemente che i commenti provengono da bot poiché provengono realmente da dialoghi umani e commenti raccolti da altre bacheche web (forum, commenti sul blog, ecc.)

3) Approccio concettualmente nuovo

Spiacente, ho rimosso questa parte come precipitata


1
Hai delineato il problema con quasi tutte le risposte su questa discussione. Tutti sarebbero rapidamente sconfitti se non fossero esclusivi di un piccolo sito Web. Se qualcuno di essi fosse utilizzato su un sito Web di grandi dimensioni o su un numero di siti Web di piccole dimensioni (ad esempio come plug-in Wordpress), verrebbero sconfitti in un giorno. In realtà non sono CAPTCHAS, ma casi fortunati di sicurezza attraverso l'oscurità. Anche tu hai ragione; lo spam moderno sta mettendo commenti che nemmeno io posso riconoscere come spam. Ho rinunciato a CAPTCHA e invece uso Mollom. Lo spam in crowdsourcing è un approccio migliore imho.
Dan,

5

In realtà potrebbe essere un'idea avere un set captcha relativo alla programmazione. Per esempio:

Captcha

C'è la possibilità che qualcuno costruisca un correttore di sintassi per aggirare questo, ma è molto più lavoro aggirare un captcha. Ti viene comunque l'idea di avere un captcha correlato.


5
Tranne: Sapresti che la risposta alla domanda di esempio (nel caso in cui qualcuno si imbattesse in questo in un secondo momento e l'immagine non ci fosse: "Quanti errori di sintassi PHP in $var == array(1 = 'one');;") è 1, no 3? (Seriamente. Prova $var == array(1 => 'one');;) ^ _ ~
pinkgothic

Heh, è ​​stato abbastanza a lungo che non ricordo di aver fatto quell'immagine. Hai ragione, ovviamente, e non penso che questo sarebbe molto buono come captcha, ma forse come requisito di accesso per un forum di programmazione.
Ross,

4

Devo ammettere che non ho esperienza nel combattere gli spambots e non so davvero quanto siano sofisticati. Detto questo, nell'articolo jQuery non vedo nulla che non possa essere realizzato esclusivamente sul server.

Per riformulare il riepilogo dall'articolo jQuery:

  1. Quando si genera il modulo di contatto sul server ...
  2. Prendi l'ora corrente.
  3. Combina quel timestamp, più una parola segreta, e genera un 'hash' di 32 caratteri e salvalo come cookie sul browser del visitatore.
  4. Memorizza il timestamp di hash o 'token' in un tag di modulo nascosto.
  5. Quando il modulo viene registrato, il valore del timestamp verrà confrontato con il "token" di 32 caratteri memorizzato nel cookie.
  6. Se le informazioni non corrispondono o mancano o se il timestamp è troppo vecchio, interrompere l'esecuzione della richiesta ...

Un'altra opzione, se si desidera utilizzare l'immagine tradizionale CAPTCHA senza il sovraccarico di generarli su ogni richiesta, è di pre-generarli offline. Quindi devi solo sceglierne uno a caso da visualizzare con ciascun modulo.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.