Il tuo approccio a questo problema è pessimo. Stai cercando di trovare lettere nella complessità temporale lineare: O(n)
. Confronto di lettere, una dopo l'altra. Significa che nel modello pessimistico devi controllare l'intero alfabeto. Supponiamo che il tuo alfabeto sia composto solo da lettere minuscole: {a,z}
e la tua password è zzz
. Avrai 26 tentativi di trovare la prima lettera, 26 tentativi di trovare la seconda lettera e 26 tentativi di trovare l'ultima.
Come accennato sopra, puoi accelerare questo processo. Si noti che l'ordine delle lettere dell'alfabeto è sempre lo stesso (le lettere sono ordinate). Puoi utilizzare la ricerca binaria con O(log(n))
di complessità temporale. Questo metodo è usato dalla maggior parte delle persone. Tuttavia, puoi anche accelerarlo.
Se sappiamo, che la password di ricerca è la parola del dizionario, potremmo usare l'analisi linguistica per costruire i nostri tentativi di iniezione in sql cieca. Potremmo usare le nostre conoscenze sulla frequenza delle lettere nel testo (ad esempio, la lettera più frequente in inglese è "e"). Potremmo anche usare la conoscenza: qual è la probabilità che dopo la lettera X, si verifichi la lettera Y. Potremmo anche provare a indovinare quante lettere X sono nella nostra parola. In questo approccio le espressioni regolari possono aiutarci molto. Definiamo l'intervallo di caratteri a cui verranno associate le funzioni LIKE
(per MSSQL
) o REGEXP
(per MySQL
). Una spiegazione abbastanza buona dell'espressione regolare negli attacchi sql injection potrebbe essere trovata qui: link