Hardening / IDS: le regole per .htaccess

Il hardening WordPress del plugin CSDN sta tutto in una scheda: “Hardening / IDS”. Sono cinque interruttori e un campo di testo. Servono a chiudere porte che quasi nessun sito usa davvero. Sono tutti disattivati, e li accendi uno alla volta.

Schema di WordPress con la scheda Hardening / IDS del plugin CSDN: hardening wordpress

Dove trovi l’hardening WordPress

Apri Impostazioni > Cisilino Site Defense Network (punto 1 dell’immagine). Poi clicca sulla scheda Hardening / IDS (punto 2). Nella scheda trovi tre sezioni, in questo ordine:

  • punto 3: sotto il titolo “Hardening / controllo accessi (IDS)”, la riga “Regole .htaccess”.
  • punto 4: “WordPress”.
  • punto 5: “Percorsi personalizzati da bloccare”.

In cima la scheda dice: “Regole opzionali applicate a livello di server (.htaccess) o WordPress. Tutte disattivate di default: attivale solo se sai che non confliggono con temi/plugin del sito.” In fondo c’è un solo pulsante: “Salva regole di hardening”.

A cosa serve

Le regole riducono la superficie d’attacco. Tre interruttori scrivono nel file .htaccess, come anche il campo dei percorsi personalizzati. Due interruttori sono filtri di WordPress. Non è un firewall e non analizza le richieste: qui “IDS” vuol dire regole di accesso a file e cartelle.

Le regole .htaccess (punto 3)

Blocca esecuzione PHP in wp-content/uploads

L’etichetta completa è “Blocca esecuzione PHP in wp-content/uploads (protezione da shell caricate come “immagine”)”. Il plugin risponde 403 a ogni richiesta di un file con estensione php, php3, php4, php5, php7, php8, php9, phtml, phps, phar o pht il cui indirizzo contiene /wp-content/uploads/. Le maiuscole non contano.

Funziona solo con Apache 2.4 (serve il modulo mod_authz_core: senza, la regola non fa nulla e non lo segnala). Su nginx il file .htaccess viene ignorato e nessuna regola di questa scheda ha effetto, filtri di WordPress a parte. Copre la cartella uploads standard, non una cartella personalizzata. Può rompere plugin che servono davvero file PHP da quella cartella. Per sapere se funziona sul tuo sito usa la prova del capitolo Scheda Test.

Disabilita l’elenco dei file nelle directory senza index

Scrive una sola riga: Options -Indexes. Aprendo una cartella senza pagina indice vedrai un errore 403 invece dell’elenco dei file. Se usi una cartella come elenco pubblico di download, quell’elenco sparisce.

Blocca l’accesso diretto a wp-config.php, .htaccess, readme.html, debug.log

Il plugin scrive una regola per ciascun nome e risponde 403. Il controllo è sul nome del file, non sul percorso. Vale quindi per ogni file con quel nome in qualunque cartella del sito, anche dentro altri plugin. Un plugin che pubblica un proprio readme.html o debug.log verrà bloccato.

Le regole di WordPress (punto 4)

Queste due regole dell’hardening WordPress sono filtri PHP. Non toccano .htaccess.

Disabilita XML-RPC

L’etichetta è “Disabilita XML-RPC (bruteforce/pingback, quasi mai necessario sui siti moderni)”. Il file xmlrpc.php resta al suo posto, ma WordPress rifiuta i metodi XML-RPC che richiedono il login. Attenzione: si fermano l’app mobile di WordPress, parte delle funzioni di Jetpack e la pubblicazione da client esterni. Il metodo pingback.ping non richiede login e il filtro non lo ferma: non conti su questa regola per chiudere i pingback. I trackback non usano XML-RPC e non sono toccati. Il collegamento del plugin al pannello non usa XML-RPC, quindi non è toccato.

Blocca l’enumerazione utenti via ?author=N

Se la richiesta contiene il parametro author con un valore (diverso da vuoto e da 0), sul sito pubblico compare “Non trovato.” con risposta 404. Attenzione: questa regola non protegge la REST API. L’elenco degli utenti in /wp-json/wp/v2/users resta raggiungibile. Alcuni temi e plugin usano ?author= per filtrare gli archivi, e verranno bloccati.

Percorsi personalizzati da bloccare (punto 5)

Il campo di testo è per chi vuole chiudere una cartella precisa, per esempio /wp-content/uploads/vecchio-backup/. Scrivi un percorso per riga. Le righe vuote vengono ignorate.

Ogni riga è testo letterale. Le maiuscole contano e la parte dopo il ? dell’indirizzo non viene confrontata. L’aiuto sotto il campo parla di “pattern”, ma qui non ne esistono. Non esistono jolly: *, ^ e $ valgono come semplici caratteri. Il plugin blocca con 403 ogni indirizzo che contiene quella stringa, in qualunque punto. Per questo il percorso /wp-content/uploads/vecchio-backup/ blocca anche /blog/wp-content/uploads/vecchio-backup/x.

Questo campo non ha un interruttore. La regola è attiva appena il campo non è vuoto e salvi.

Attenzione: se scrivi / oppure wp blocchi tutto il sito, area di amministrazione compresa. Per tornare indietro dovresti correggere .htaccess via FTP. Anche una stringa come /uploads/ blocca tutte le immagini. Evita il carattere % nei percorsi.

Valori predefiniti

Cinque interruttori disattivati e campo vuoto. Le impostazioni sono nell’opzione csdn_hardening.

Come si usa

Procedi con calma: l’hardening WordPress si fa una regola alla volta.

  1. Fai una copia di .htaccess prima di cominciare.
  2. Spunta una sola regola.
  3. Clicca su “Salva regole di hardening”.
  4. Controlla che il sito si apra e che il pannello di amministrazione funzioni.
  5. Passa alla regola successiva.

Dopo il salvataggio vieni riportato alla scheda Generale, non a quella in cui hai salvato. In alto trovi l’avviso. In caso di successo dice “Regole di hardening salvate e applicate.”. In caso di errore dice “Impostazioni salvate, ma la scrittura in .htaccess è fallita (permessi file?). Le regole non sono attive.”. Con l’errore, i due filtri di WordPress restano comunque attivi.

Attenzione: il plugin non crea alcun backup di .htaccess. Non controlla nemmeno la sintassi prima di scrivere. Una regola incompatibile con il tuo server può dare errore 500 su tutto il sito. Su una rete multisite il file è quello della rete: l’errore colpisce tutti i siti.

Cosa succede dietro le quinte

Il plugin scrive tra due marcatori: # BEGIN Cisilino Site Defense Network - Hardening e il relativo # END. Il resto del file non viene toccato. Un secondo blocco, separato, contiene gli IP bloccati. Se disattivi il plugin, i due blocchi vengono svuotati. Se spegni tutto e salvi, il blocco di hardening resta vuoto.

Se qualcosa non va

Se dopo l’hardening WordPress il sito mostra errore 500, apri .htaccess via FTP. Cancella le righe tra i due marcatori di hardening. Poi riprova con meno regole. Se non si scrive nel file, controlla i permessi di .htaccess.

Per un quadro più ampio sulle buone pratiche leggi la guida ufficiale di hardening di WordPress: spiega altre misure che stanno fuori dal plugin.

Capitolo precedente: Scheda IP bloccati: leggere la blacklist. Capitolo successivo: Sorveglianza dei caricamenti e controllo di integrità. Per l’elenco completo dei capitoli torna all’introduzione del manuale.

Commenti

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

Avviso sui cookie di WordPress da parte di Real Cookie Banner