Come proteggere la mia applicazione captcha?

1

Ciao scambio di informazioni sulla sicurezza dello stack!

Ho creato un'applicazione captcha in PHP. Non è certo una buona idea farlo, ma ero annoiato e volevo conoscere le curve di Bézier e gli algoritmi della linea di Bresenham. Pertanto, ignoriamo che la mia applicazione non è realmente sicura contro i tentativi di cracking che provano a decifrarlo con i metodi OCR.

Alla mia domanda: La mia app scrive fondamentalmente ogni due ore 10 nuove immagini captcha in una directory (con un cronjob). Se ci sono più di 1000 immagini nella directory, sostituisce le 10 immagini più vecchie con quelle appena generate. Quindi c'è sempre un pool di 1000 captcha che si aggiorna lentamente ma costantemente. Tutte le immagini captcha hanno un nome di file casuale lungo 18 caratteri e nel mio database ho un array associativo che mappa i nomi dei file come chiavi del valore captcha. L'array ha un aspetto simile al seguente:

Array
(
    [captchas/6aab1bfa796ff02b48] => knfbb
    [captchas/3f53d6eefb535233f0] => HnHnQ
    [captchas/436e3567bdbb987b45] => HaEQS
    [captchas/916ac5d684f17f1677] => aQnWE
    [captchas/fb6267bfb72ff37fdb] => fHWya
    [captchas/3fb748ba654b98088e] => WkSEG
    [captchas/71ea9d1d88a245c1e3] => HkQXy
    .
    .
    .
);

Ogni volta che la mia applicazione captcha si aggancia a un modulo di commento o modulo di accesso per iniettare un'immagine captcha, sceglie un captcha casuale dal pool e cerchiamo di risolverlo.

Ora potresti già vedere lo svantaggio della sicurezza: come posso assicurarmi che un utente non scarichi tutti i captcha e li mappi manualmente (decifrare manualmente il captcha e mapparlo alla somma md5 dell'immagine png) è il valore di stringa corrispondente e quindi invia spam al mio sito con uno script?

L'hacker dovrebbe solo scaricare circa il 20 percento di tutte le immagini e poi ha avuto un tasso medio di successo, errhh, sì 20%, riuscendo a spammare il mio sito (lo script aggiornerebbe semplicemente il modulo fintanto che serve un captcha che sa).

Come difenderesti da tali attacchi? (A condizione che l'architettura della mia app non cambi: non posso generare captcha su richiesta, sarebbe troppo lento).

Ho pensato di inserire nella lista nera gli indirizzi IP (analizzando gli indirizzi IP di apache2 access_log) dal mio sito che visitano il mio sito più di 100 volte ogni 5 minuti, ma questo potrebbe essere facilmente aggirato dai proxy.

    
posta Nikolai Tschacher 30.10.2013 - 22:32
fonte

4 risposte

3

Il problema sembra esporre l'URL dell'immagine e lì avvisando l'utente del possibile captcha ripetuto.

Hai considerato l'utilizzo di uno script php per servire l'immagine? Forse usando la sessione per identificare quale immagine captcha servire. Sebbene un po 'più lento del client che ottiene direttamente l'immagine, fornisce un mezzo per oscurare il file che l'utente sta caricando.

    
risposta data 06.11.2013 - 11:37
fonte
2

Invece di tutto quel casino di archiviazione. Perché non usare PHP GDI?

http://stackoverflow.com/questions/13267846/how-to-add-text-to-an-image-with-php-gd-library

Le immagini possono essere una buona idea. puoi lasciarli così come sono .. basta combinare testo e immagine, e questo potrebbe aumentare la difficoltà di indovinare il captcha giusto.

Se vuoi maggiore sicurezza, fai una domanda..le domande dicono

Che giorno erano 4 giorni da adesso? o Come si scrive la parola "stackexchange"?

    
risposta data 31.10.2013 - 07:13
fonte
2

In primo luogo, i miei complimenti per averlo fatto solo per il gusto di farlo, non ci sono abbastanza persone che si aggirano intorno al giorno d'oggi. ;)

Direi che l'approccio migliore è generare al volo, a meno che il traffico verso il tuo sito sia molto pesante, o il tuo server sia già particolarmente sovraccarico. Elimina tutto il problema dell'hashing del valore, e il download dell'immagine e così via, e nella maggior parte dei casi, non sovraccaricherà molto il tuo server.

Generare al volo fornisce una sfida in più, ma fornisce all'utente un indirizzo che possono caricare che aggiunge un carico extra al server, oltre a ricaricare solo una pagina media, quindi implementando i limiti su quanto un IP può caricare queste immagini potrebbe essere una buona idea, sempre a seconda del traffico verso il tuo sito.

Ovviamente la vera migliore risposta è usare uno dei sistemi di generazione e servizio captcha, ma questo è un po 'fuori dallo spirito sperimentale che sembra aver adottato.

    
risposta data 06.11.2013 - 13:24
fonte
2

Un approccio migliore è 'testarlo'. I CAPTCHA sono tutti su una gara, come in "chi può creare un puzzle resistente agli attacchi di IA ma abbastanza semplice da non infastidire gli utenti legittimi?" Ma non importa quale sia la tua tecnologia, un attaccante dedicato può alla fine sconfiggerlo, se hanno abbastanza motivazione o ricompensa per farlo. Pertanto, nessun CAPTCHA sarà mai perfetto e rimani perfetto. Se puoi accettarlo, allora puoi mirare a "abbastanza buono".

Quindi nel tuo caso hai stabilito una finestra scorrevole di due ore. Se qualcuno ti ruba una dozzina di nomi di file in questo momento, questo non li avvantaggerà nemmeno tra due ore. Lo considererei seriamente "abbastanza buono da dispiegare". Certo, non lo distribuisci nel vuoto. Hai ancora bisogno di monitorarlo per abuso, quindi monitoralo. Se uno spammer attraversa, fai qualche ricerca in più per determinare se fosse un essere umano o un bot.

Inizia a ricavarne valore da oggi e impara da esso alcune lezioni del mondo reale. È meglio che lasciarlo su uno scaffale e chiedere a stackexchange "va bene?"

    
risposta data 06.11.2013 - 17:14
fonte

Leggi altre domande sui tag