Limitare i brute force su Drupal 7

Limitare i brute force su Drupal 7

Tra le novità di Drupal 7 troviamo anche un semplice meccanismo per prevenire attacchi di tipo "brute force" per l'accesso agli account utente. In pratica dopo cinque tentativi di accesso falliti il sistema blocca temporaneamente l'account richiedendo di attendere un po' di tempo prima che il sistema si sblocchi.

Come modificare il tempo di attesa per poter accedere ad un sito Drupal dopo che l'account è stato disabilitato:

Il valore predefinito del tempo che deve trascorrere per sbloccare gli account è di 21600 secondi (ovvero 6 ore). Non è prevista una interfaccia utente per modificare questo parametro quindi per cambiarne il valore si deve aggiungere manualmente una variabile di configurazione (user_failed_login_user_window) nel file settings.php.

Ad esempio per sbloccare gli account dopo cinque minuti basta aggiungere questa riga:

$conf['user_failed_login_user_window'] = 300;

In alternativa gli utenti sono invitati a resettare la propria password seguendo un link visualizzato nel messaggio di errore che teoricamente dovrebbe permettere un nuovo accesso.

Sfortunatamente un bug impedisce il corretto funzionamento della procedura. Pertanto, in questo caso, se si vuole riattivare l'account prima della successiva esecuzione della funzione system_cron(), che in base al parametro sopracitato si occupa di sbloccare gli account utenti bloccati, si rende necessario un intervento manuale.

Come resettare il blocco temporaneo degli utenti in Drupal 7:

Drupal 7 memorizza le informazioni necessarie a bloccare l'utente nella tabella flood, quindi se non si vuole aspettare il tempo stabilito si può semplicemente svuotare la tabella manualmente, rimuovendo i record specifici all'account in questione dalla tabella oppure svuotandola completamente con un semplice comando SQL:

DELETE FROM `flood`;

Se si usa Drush si può eseguire la query anche da riga di comando:

drush php-eval 'db_query("DELETE FROM `flood`");'

Come modificare il numero di tentativi di accesso a Drupal prima che l'account sia bloccato

Oltre al parametro che determina il tempo per cui un utente non può più accedere al sito Drupal, esiste anche un parametro che stabilisce il numero di tentativi errati che un utente può fare prima che l'account sia disabilitato temporaneamente. Il parametro è user_failed_login_user_limit e lo si può modificare analogamente alla variabile indicata in precedenza.

Se ad esempio vogliamo disabilitare l'account utente dopo 10 tentativi falliti si dovrà aggiungere nel file settings.php la riga seguente:

$conf['user_failed_login_user_limit'] = 10;

Protezione a livello IP per il blocco degli utenti su Drupal 7

Oltre al controllo dei tentativi di accesso di un particolare utente, Drupal 7 tiene traccia dei tentativi di accesso generici effettuati da ogni singolo IP. Le impostazioni predefinite di Drupal 7 stabiliscono che lo stesso IP non può effettuare più di 50 richieste errate e l'intervallo di tempo che bisogna attendere perché l'IP sia rimosso dalla tabella flood è di 1 ora.

Anche questi due parametri possono essere modificati agendo sulle variabili: user_failed_login_ip_limit e user_failed_login_ip_window.

Quindi nel caso si voglia limitare la finestra di validità di un IP nella tabella flood a 2 ore e si considerino accettabili 100 tentativi di accesso da parte dello stesso IP in queste due ore, basta modificare il file settings.php aggiungendo le seguenti due righe:

$conf['user_failed_login_ip_window'] = 7200;
$conf['user_failed_login_ip_limit'] = 100;