La maggior parte degli altri metodi menzionati qui sono facilmente sconfitti e / o riducono significativamente le prestazioni.
Ecco perché i firewall per applicazioni Web (WAF) non si basano su di essi.
2 metodi affidabili sono:
-
Analizza la sequenza di pacchetti nell'intestazione IP: la maggior parte degli stack TCP / IP
numero di pacchetti in sequenza, quindi se il numero è casuale, allora il
il client è probabilmente dietro NAT (una connessione Internet condivisa con
altri clienti). C'è un sovraccarico di RAM per ricordare l'ID del pacchetto precedente, ma è paragonabile a un cookie di sessione. Questo è più difficile da spoofare dal momento che l'utente malintenzionato deve riscrivere il pacchetto a un livello basso, ma non impossibile, quindi dovrebbe essere combinato con la limitazione della velocità: consentire agli IP pubblici NATted di avere più hit / secondo.
-
Cookie di sessione con autenticazione crittografica:
I normali cookie di sessione sono non sufficienti. Non sono crittografati con HTTP e, anche con HTTPS, potrebbero non essere parte di un payload crittografato HTTPS e quindi non autenticati. link fallo correttamente. Assicurati che non sia solo crittografato, ma autenticato / "firmato". link " fun-and-profit "Se si ha accesso solo al codice dell'app Web, questa è l'opzione migliore. Ovviamente se i cookie sono disabilitati, quindi eseguire un JavaScript sul lato client che distingue tra browser e bot (chiamare per la risoluzione dello schermo, ecc. Che un bot non supporta e restituire lo stato del bot se lo script fallisce). Combina questo con la limitazione della velocità mediante cookie di sessione autenticati o, se i cookie sono disattivati, la limitazione della velocità basata su IP ("throttling") o il blocco. Questo accetta / rifiuta la richiesta all'inizio della routine del parser IP / HTTP, conservando i cicli futuri della CPU, dal momento che un utente malintenzionato può ritentare migliaia di volte. A causa di DHCP / PPPoE / nuovi cookie di sessione, i divieti dovrebbero scadere dopo pochi minuti. Tieni presente che devi elencare in bianco gli IP non falsificati dei crawler dei motori di ricerca come Google e Baidu. Altrimenti la classifica delle ricerche potrebbe risentirne.
Se combini la tua soluzione con la limitazione della velocità, il limite di frequenza corretto dovrebbe essere 1-2 volte il numero di URL per pagina. Ad esempio, se login.php include 2 file CSS, 4 file JavaScript e 10 immagini più la stessa pagina, è necessario consentire almeno un totale di 17 risultati per cookie sessione client, al secondo. Altrimenti potresti bloccare / limitare le richieste normali.
Per gli attacchi persistenti, dovresti chiedere al tuo ISP di bloccare / blackhole la rotta verso monte.
Perché non usare le altre soluzioni?
'User-Agent:' è molto semplice da parodiare:
wget -O index.html --user-agent="My Fake Browser"
I cookie di sessione, "X-Forwarded-For:" L'intestazione HTTP e altre intestazioni sono anche banali da rubare / spoofare. Google "Firesheep" o "Cookie Manager +" o "Modifica plug-in intestazioni" o "Plug-in LiveHeaders" ecc. Per prova.
La limitazione della velocità non è sufficiente da sola, perché un attacco invisibile si randomizza o aumenta il tempo di attesa tra le richieste:
wget --limit-rate=10 http://example.com/index.php
La forza bruta di solito non è il tuo unico problema. link Coding e testare una protezione efficace richiede tempo. Per risparmiare tempo e / o cicli di CPU sui server Web: si moltiplica i rifiuti se si dispone di una server farm: l'host Web dovrebbe offrire un WAF front-end con questo configurato per te. Questa è la soluzione migliore: non farlo dal lato server. Vai a monte.