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.