Il problema con un DDoS è in due parti:
1) Poiché i robot sono così numerosi, non devono avere un throttle di richiesta all'altezza di un singolo bot e quindi non sono facili da riconoscere come bot.
2) Tutto ciò che vedi sono gli indirizzi IP (e User-Agent
s a seconda di come filtri il traffico bot). Qualsiasi indirizzo IP potrebbe essere un bot DDoS e qualsiasi indirizzo IP potrebbe essere un visitatore legittimo. Alcuni indirizzi IP avranno sia un bot DDoS che un visitatore legittimo. Che cosa fai?
Diciamo che il tuo sito può gestire 1000 req / se un visitatore non fa mai più di 10 req / s. Un bot a 100 req / s è facile da bloccare, dieci bot a 100 req / s sono facili da bloccare. Ma 200 bot a 5 req / s sono difficili da bloccare, perché si comportano correttamente.
200 bot a 100 req / s sono difficili da bloccare, perché non possono nemmeno fare più di 5 req / s, facendo sembrare che si comportino correttamente. Questa situazione è di gran lunga peggiore di 200 bot a 5 req / s, perché un visitatore è ora 10 su 10010 richieste che cercano di spremere nella connessione piuttosto che 10 tra 1010 più gestibili che stanno raggiungendo con successo il server.
1000 bot a 100 req / s renderebbero improbabile per ogni visitatore reale connettersi al sito. E un attacco di questa portata causerà problemi anche altrove.
Una difesa strong per il tuo sito è un'arma strong per un attaccante:
Se il tuo sito blocca gli indirizzi IP (o anche i browser specifici sugli IP) se si comportano male, qualcuno potrebbe decidere di abusare della tua difesa per provocare un attacco DoS sul lato client.
Esempio: Mallory crea una pagina web che ha un centinaio di "immagini" con margin-left: -1000em; width: 1px; height: 1px;
e tutte quelle immagini sono degli URL "sensibili" sul tuo sito. Quando un visitatore visita la pagina di Mallory, invierà 100 richieste abusive al tuo server e quindi verrà bloccato.
Quindi ottenere una difesa più aggressiva contro gli attacchi DoS (D) causerà anche un'altra vulnerabilità.
Una difesa "intelligente" come i CAPTCHA (per dare ai visitatori la possibilità di dimostrare che sono anche visitatori e non solo robot dannosi) avrà anche l'effetto collaterale di richiedere effettivamente risorse del server.
Caricare le immagini quando la connessione è intasata non sembra un'ottima idea. Non ricorda nemmeno un numero enorme di sessioni per i CAPTCHA, CAPTCHA a cui non verrà data risposta, parzialmente perché le immagini non possono essere inviate, in parte perché la maggioranza dei visitatori non è umana.
E su un sito dinamico (altamente o non assegnato), starai giocando a fuoco con la benzina.