File listing delle directory
Quando l'utente prova ad accedere ad una directory della propria istallazione di WordPress, il server restituisce automaticamente il file indice presente. Se questo dovesse mancare, il browser restituirà un elenco delle risorse contenute nella directory. L'immagine mostra parte del contenuto della directory /wp-includes
di un'istallazione in cui non è stato inibito il file listing.
Queste impostazioni dei browser aprono una vulnerabilità. Il rischio è che chiunque potrà accedere al contenuto dei folder dell'istallazione, quindi non soltanto ai file dati, ma anche ai file del core e di configurazione. Grazie al file .htaccess
è possibile inibire il file listing con una semplice direttiva:
# disable directory listing
Options All -Indexes
Nella situazione opposta, cioè se si dovesse avere la necessità di abilitare il file listing in una sub-directory, che potrebbe essere la directory /wp-content/uploads
, la direttiva da inserire nel file .htaccess
del sub-folder è la seguente:
# enable directory listing
Options All +Indexes
Per un controllo più granulare dei file che si intende nascondere dal file listing, si può utilizzare la direttiva IndexIgnore
:
IndexIgnore *.mp3 *.zip *.txt *.ini
Un tentativo di accesso diretto ad una directory protetta dal file listing dà come risultato un errore 403, "Forbidden":
Doppio livello di autenticazione
Una pratica adottata sempre più di frequente per aumentare il livello di sicurezza del pannello di amministrazione di WordPress è quella del doppio livello di autenticazione. Le soluzioni a disposizione per implementare questa misura di sicurezza sono diverse. Da un lato l'amministratore può sfruttare la Two Factor Autentication, funzionalità che WordPress offre a partire dal 2013 e già analizzata.
In alternativa alla Two Factor Autentication, l'amministratore può implementare un sistema di doppia autenticazione sfruttando ancora le funzionalità di Apache.
Oltre al file .htaccess
, occorrerà creare un file .htpasswd
. Il primo ospiterà, come al solito, le direttive, il secondo registrerà una coppia username:password
. La password viene generata in base all'algoritmo MD5 e, per gli utenti Unix/Linux e Mac può essere generato da linea di comando con l'istruzione:
htpasswd -bc /path/to/dir/.htpasswd username password
Nel file .htpasswd
sarà generata una stringa simile a:
username:$apr1$MbfSmZ6W$kGEo9gM1Tj.s7qb74mBFe1
Si apra quindi il file .htaccess
e si aggiungano le seguenti direttive:
<IfModule mod_authn_file.c>
AuthName "Inserire la password"
AuthType Basic
AuthUserFile /path/to/wp-admin/.htpasswd
<Limit GET POST>
Require valid-user
</Limit>
</IfModule>
La direttiva AuthName
imposta il nome dell'autorizzazione e l'etichetta della finestra che richiede le credenziali. AuthType
imposta il tipo di autenticazione, AuthUserFile
imposta il percorso del file in cui sono memorizzate le credenziali. <Limit>
imposta il controllo solo alle richieste con metodo GET
e POST
.
Perchè tutto possa funzionare, ovviamente, sarà necessario impostare il giusto percorso per il file .htpasswd
, sia nella shell dei comandi, sia nel file .htaccess
.
L'immagine conclusiva mostra la finestra di dialogo visualizzata all'utente che tenta di accedere al pannello di amministrazione.