La risposta complessiva è: puoi distinguere tra umani e spambot in base alla disponibilità degli sviluppatori spambot ad attaccarti in modo specifico. Esistono essenzialmente due categorie di difese: distinzione bot / umana e metodi per aumentare il costo di effettuare attacchi.
Distinguere i bot dagli umani
Molte tecniche alternative ai CAPTCHA nella prima famiglia sono state già proposte su Stack Exchange: Esiste una vera alternativa all'utilizzo delle immagini CAPTCHA?
Non discuterò CUPTCHU e CIPTCHI e altri CAPTCHA "utilizzabili". Tutti richiedono che gli umani svolgano un compito per discriminarli contro i robot. Probabilmente la maggior parte di essi può essere infranta se un avversario li bersaglia in modo specifico, e tutti richiedono ancora di sprecare il tempo del tuo utente - almeno uno di loro si preoccupa di UX ed è tollerabile in alcuni contesti di utilizzo dove la giocosità è un buon valore per l'esperienza che stai creando.
Aumentare il costo degli attacchi
Il mio preferito è semplicemente utilizzare gli schemi di identità federati in modo da affidarsi ad altri provider di identità per confermare se un IP specifico ha un account con essi - OAuth lo fa - e che questo account ha una quantità significativa di valore ( per un account di posta elettronica, ha ricevuto notevoli quantità di posta da altri account ritenuti reali *) - nessuno lo fa ancora per mia conoscenza.
Si noti che tale approccio non fornisce alcuna protezione contro i dispositivi infetti piuttosto che gli spambots, cosa che è una preoccupazione crescente per siti come Facebook in cui alcuni account reali e attendibili vengono violati a causa di estensioni dannose del browser e iniziano a servire spam (nessun URL, è un discorso accademico).
Altri metodi possono essere utili, se hai dati empirici che dimostrano che funziona per chiunque ti attacchi. Puoi ridurre il numero di account creati per IP, ad es. settimana / mese prima di servire un CAPTCHA se stai affrontando spambot che riutilizzano gli stessi IP botnet per creare account invece di cambiare sistematicamente. È possibile eseguire l'apprendimento automatico sui dettagli degli spambot esistenti (forma di nickname, dettagli riempiti) per identificare un recidivo ricorrente e utilizzarlo come filtro aggiuntivo per decidere se applicare CAPTCHA o meno. Ovviamente ciò richiede molto di manutenzione e funziona solo contro avversari non motivati, quindi se sei una piattaforma da un milione di utenti probabilmente sei sfortunato. Gli avversari attivi superano banalmente questi casi di apprendimento automatico (vedi conferenze AISec).
I CAPTCHA sono un no no, in ogni caso
Se ritieni che i CAPTCHA siano assolutamente necessari in alcuni casi, devi comunque implementare altri metodi per rilevare i trasgressori e servire solo CAPTCHA quando hai dei dubbi su un account. È molto più probabile che un vero utente fa un CAPTCHA di uno spambot riesca a 4 o 5 diversi controlli.
* fare affidamento su catene di fiducia si apre agli attacchi di sybil, ma questi mi sembrano molto più facili da difendersi (SybilGuard e qualsiasi altra cosa è stata pubblicata da allora) che ad es. rilevamenti automatici di commenti / revisioni automatizzati e molto più gradevoli all'utente rispetto all'uso dei CAPTCHA (con tassi di errore fino al 40% secondo la ricercatrice di usabilità Angela Sasse).