Menu
Sicurezza Wordpress

Come proteggere la cartella wp-admin con password HTTP

Gianluca Gentile · · 4 min di lettura

Come proteggere la cartella wp-admin con password HTTP

La pagina di login di WordPress (wp-login.php) e la cartella wp-admin sono i bersagli principali degli attacchi brute force. I bot automatizzati provano migliaia di combinazioni di username e password ogni giorno. Una protezione efficace è aggiungere un secondo livello di autenticazione HTTP a livello server: prima ancora che WordPress venga caricato, il server richiede credenziali aggiuntive. In questa guida ti mostro come configurare la protezione HTTP auth su wp-admin con Apache e Nginx.

Come funziona la protezione HTTP Authentication

L’HTTP Basic Authentication è un meccanismo del web server (non di WordPress) che richiede username e password prima di accedere a una cartella o un file specifico. Quando un visitatore o un bot tenta di accedere a /wp-admin/ o wp-login.php, il browser mostra un popup nativo che richiede le credenziali. Se le credenziali non sono corrette, il server risponde con un errore 401 senza mai caricare PHP o WordPress.

Questo ha due vantaggi fondamentali:

  • I bot vengono bloccati prima di PHP: il server rifiuta la richiesta a livello di configurazione, senza consumare risorse del server per eseguire WordPress.
  • Doppia autenticazione: anche se un attaccante scopre le credenziali WordPress, deve superare anche l’autenticazione HTTP.

Configurazione su Apache con .htaccess

Passo 1: creare il file delle password

Per prima cosa, crea un file che contenga le credenziali. Questo file deve essere salvato fuori dalla document root per sicurezza (non accessibile dal web):

htpasswd -c /home/utente/.htpasswd nome_utente

Il comando ti chiederà di inserire e confermare la password. Il file .htpasswd conterrà l’username e la password criptata. Se vuoi aggiungere altri utenti, usa lo stesso comando senza il flag -c (che crea il file da zero).

Passo 2: configurare .htaccess nella cartella wp-admin

Crea o modifica il file .htaccess dentro la cartella wp-admin/ (non quello nella root di WordPress):

AuthType Basic
AuthName "Area Riservata"
AuthUserFile /home/utente/.htpasswd
Require valid-user

Passo 3: proteggere anche wp-login.php

La cartella wp-admin è protetta, ma wp-login.php si trova nella root ed è il vero bersaglio dei bot. Aggiungi queste righe al file .htaccess nella root di WordPress:

<Files wp-login.php>
AuthType Basic
AuthName "Area Riservata"
AuthUserFile /home/utente/.htpasswd
Require valid-user
</Files>

Configurazione su Nginx

Su Nginx la configurazione è diversa. Modifica il file di configurazione del virtual host:

# Proteggere wp-admin
location /wp-admin {
    auth_basic "Area Riservata";
    auth_basic_user_file /etc/nginx/.htpasswd;
    location ~ .php$ {
        fastcgi_pass unix:/run/php/php-fpm.sock;
        include fastcgi_params;
    }
}

# Proteggere wp-login.php
location = /wp-login.php {
    auth_basic "Area Riservata";
    auth_basic_user_file /etc/nginx/.htpasswd;
    fastcgi_pass unix:/run/php/php-fpm.sock;
    include fastcgi_params;
}

Dopo la modifica, ricarica la configurazione Nginx con nginx -t && systemctl reload nginx.

Risolvere il problema con admin-ajax.php

C’è un problema importante da gestire: WordPress usa il file wp-admin/admin-ajax.php per le richieste AJAX del front-end (form di contatto, caricamento dinamico di contenuti, plugin che usano AJAX). Se proteggi tutta la cartella wp-admin, queste richieste AJAX vengono bloccate e alcune funzionalità del sito smettono di funzionare.

La soluzione è escludere admin-ajax.php dalla protezione. Su Apache, aggiungi nel file .htaccess della cartella wp-admin:

<Files admin-ajax.php>
    Order allow,deny
    Allow from all
    Satisfy any
</Files>

Su Nginx, aggiungi una location specifica prima della protezione di wp-admin:

location = /wp-admin/admin-ajax.php {
    auth_basic off;
    fastcgi_pass unix:/run/php/php-fpm.sock;
    include fastcgi_params;
}

Limitare l’accesso per indirizzo IP

Se accedi al pannello admin sempre dallo stesso indirizzo IP (ufficio, VPN), puoi limitare l’accesso a wp-admin solo a quell’IP, eliminando completamente la necessità di password HTTP. Su Apache:

<Files wp-login.php>
    Order Deny,Allow
    Deny from all
    Allow from 123.456.789.0
</Files>

Su Nginx:

location = /wp-login.php {
    allow 123.456.789.0;
    deny all;
    fastcgi_pass unix:/run/php/php-fpm.sock;
    include fastcgi_params;
}

Questa soluzione è la più sicura in assoluto ma richiede un IP statico. Se il tuo IP cambia frequentemente, la protezione HTTP con password è la scelta migliore.

Combinare con altri metodi di sicurezza

La protezione HTTP auth funziona al meglio quando combinata con altre misure: limitazione dei tentativi di login con plugin come Limit Login Attempts, autenticazione a due fattori (2FA) per un terzo livello di sicurezza, e username non prevedibili (mai “admin”). Con tutti questi livelli attivi, un attaccante dovrebbe superare l’autenticazione HTTP, indovinare l’username WordPress, la password WordPress e il codice 2FA — rendendo un attacco brute force praticamente impossibile.

Serve aiuto con la configurazione?

Se non hai familiarità con la configurazione del server o se vuoi proteggere il tuo sito WordPress a livello professionale, il team di SoccorsoWP può configurare tutti i livelli di sicurezza per te. Apri un ticket e blinda il tuo pannello admin.

Condividi: