Diciamo che ho un modulo di ricerca per un blog (o qualsiasi altro sistema che userebbe SQL per eseguire le query) e voglio proteggerlo dalla negazione del servizio. Un utente malintenzionato vuole attaccare il mio sito invadendo la funzione di ricerca, il che causerebbe un sacco di query SQL e potrebbe comportare il rifiuto.
Questo è teorico quindi non si tratta di un singolo tipo di linguaggio o di un sistema di gestione del database, ma se vuoi puoi immaginare che sia PHP e MySQL (anche se mi chiedo degli effetti in generale piuttosto che specifici per una piattaforma) .
Una richiesta come GET /search.php?s=[SEARCH]
ricerca nel database tutti gli articoli contenenti [SEARCH]
e li restituisce. Supponiamo che la lunghezza massima del carattere per [SEARCH]
sia 128.
Mi chiedo in termini di "perdita di prestazioni" che sarebbe la peggiore forma di attacco tra questi due scenari:
- L'utente malintenzionato cerca una stringa casuale di 128 caratteri (ad esempio
aisoizeuf[...]deuedujed
). - L'utente malintenzionato cerca ogni volta un singolo personaggio (ad esempio
e
).
All'inizio pensavo che l'attacco n. 1 sarebbe stato più efficace, legittimando così un limite rigoroso alla lunghezza del carattere della query di ricerca. Ma poi ho pensato, poiché nel mio esempio stiamo parlando di un blog, che più ricerche su un singolo personaggio potrebbero restituire molti più articoli perché quasi tutto ciò che scrivi conterrà almeno una vocale. Allora ho capito che forse non è una risposta così chiara.
L'attacco n. 1 richiederà più risorse per inviare la query e scansionare tutte le voci nel database, ma non restituirà nulla, mentre l'attacco n. 2 farà l'opposto - non impiegherà molte risorse per analizzare il database ma poiché quasi ogni voce conterrà un'occorrenza della query di ricerca, restituirà quasi ogni voce nel database
Quale attacco ritieni sia più pericoloso e userai più risorse?