Voglio fornire una difesa di base contro gli attacchi a forza bruta contro un semplice servizio web HTTPS. Il servizio web fornisce un metodo login
(diciamo al link ) che ottiene un nome utente e una password come parametri HTTP GET o come campi di un oggetto JSON dato da HTTP POST. Il servizio restituisce il codice di stato HTTP 403 sui tentativi di accesso non riusciti. Posso pensare a due tipi di attacchi per garantire contro:
- Troppi tentativi di accesso non riusciti dallo stesso IP in un dato intervallo di tempo
- Troppi tentativi di accesso non riusciti per lo stesso nome utente in un determinato intervallo di tempo
Per quanto ho capito, mod-security
è adatto a rilevare questi attacchi come richieste di blocco, ma le esercitazioni che ho trovato sono molto complesse e la sintassi mod-security
mi imbarazza. Potresti fornire un set di regole di esempio per proteggersi dagli attacchi specificati sopra? In pseudo codice direi qualcosa di simile al seguente, con numeri appropriati di n
, m
e x
:
<LocationMatch /login>
IF response_status == 403 THEN
user = fetch_user_from_request
IF ++fail_count_per_IP[IP] > n
OR ++fail_count_per_USER[USER] > m THEN
block IP FOR x minutes
</LocationMatch>