Segue un elenco di misure di sicurezza per siti basati su WordPress, arricchito con esempi pratici di parametri da configurare. Linee guida generali da adattare in base al traffico del sito e alla sue caratteristiche.
1. Autenticazione e Gestione Accessi
Captcha
Parametri: Attivare su: Login, Registrazione, Recupero Password, Commenti.
Esempio: Usare un plugin di CAPTCHA con un soglia di rischio in modo da limitare tentativi di accesso mediante bot.
Limitazione tentativi di accesso (Brute Force)
Parametri: Tentativi massimi, durata blocco, azione dopo il blocco.
Esempio: Bloccare l’IP dopo 5 tentativi falliti in un arco di 15 minuti. Il blocco dura 30 minuti (o fino a 24h se si ripete l’attacco).
Cambio URL di accesso (Login Slugging)
Parametri: Nuovo percorso personalizzato.
Esempio: Sostituire /wp-login.php con /accesso-privato-xyz.
Regola: Disabilitare completamente l’accesso alla pagina originale (reindirizzamento 404 o 403).
Autenticazione a Due Fattori (2FA)
Parametri: Obbligatorietà per ruoli utente.
Esempio: Obbligatorio per Amministratori e Editor. Opzionale ma consigliato per Autori. Usare app TOTP (Google Authenticator/Authy) con un codice valido per 30 secondi.
Politica Password
Parametri: Lunghezza minima, complessità, scadenza.
Esempio: Minimo 12 caratteri, almeno 1 maiuscola, 1 minuscola, 1 numero, 1 simbolo. Scadenza password ogni 90 giorni per gli amministratori.
2. Headers di Sicurezza (HTTP Headers)
Questi si configurano spesso nel file .htaccess (Apache) o nella configurazione del server (Nginx), oppure tramite plugin appositi.
Content-Security-Policy (CSP)
Parametri: Origini consentite per script, immagini, stili.
Esempio: default-src ‘self’; script-src ‘self’ ‘unsafe-inline’ https://www.google-analytics.com; img-src ‘self’ data: https:; frame-ancestors ‘none’;
Obiettivo: Bloccare script esterni non autorizzati e prevenire clickjacking.
X-Frame-Options
Parametri: Politica di incorniciamento.
Esempio: DENY (nessuno può incorniciare il sito) o SAMEORIGIN (solo pagine dello stesso dominio).
X-Content-Type-Options
Parametri: Comportamento MIME.
Esempio: nosniff. Impedisce al browser di interpretare file come tipi diversi da quello dichiarato (es. evitare che un file .txt venga eseguito come .js).
Strict-Transport-Security (HSTS)
Parametri: Durata massima (max-age), inclusione sottodomini.
Esempio: max-age=31536000; includeSubDomains; preload. Forza l’uso di HTTPS per 1 anno.
Referrer-Policy
Parametri: Quantità di informazioni di referrer da inviare.
Esempio: strict-origin-when-cross-origin. Invia l’origine solo quando si passa da HTTPS a HTTPS, altrimenti nessuna informazione.
3. Rate Limiting (limitazione di numero di pagine lette in un minuto dallo stesso IP) NB: attenzione a non bloccare o limitare gli IP dei motori di ricerca (ad esempio Googlebot).
Da configurare a livello di server (Nginx/Apache) o tramite plugin di sicurezza.
Protezione Login
Parametri: Richieste per IP per minuto sulla pagina di login.
Esempio: Max 10 richieste al minuto per IP su /wp-login.php e /xmlrpc.php. Superato il limite, restituire errore 429 Too Many Requests per 10 minuti.
Protezione API e Ricerca
Parametri: Richieste per endpoint sensibili.
Esempio: Max 30 richieste al minuto per IP sull’endpoint di ricerca (/wp-json/wp/v2/search) per evitare carichi eccessivi sul database.
Protezione Generale (DDoS leggero)
Parametri: Connessioni totali per IP.
Esempio: Max 100 connessioni simultanee per singolo indirizzo IP. Se superate, bloccare temporaneamente l’IP.
Protezione contro web scraping.
Parametri: si possono bloccare ad esempio più di 200 pdf letti al minuto (di meno potrebbe limitare l’indicizzazione da parte dei motori di ricerca. Se il plugin in uso per permette di escludere dalla limitazione googlebot ed altri spider dei motori di ricerca, allora il limite potrebbe essere portato a 1 o 2 al minuto (difficilmente un utente può leggere più di un pdf al minuto.
4. Aggiornamenti e Manutenzione
Gestione Plugin/Temi
Parametri: Frequenza controllo, azione automatica.
Esempio: Abilitare aggiornamenti automatici minori per Core e Plugin (effettuare un test prima su staging). Disabilitare aggiornamenti maggiori automatici se il sito è critico.
Regola: Rimuovere immediatamente plugin/temi non attivi , non basta disattivarli.
Backup
Parametri: Frequenza, retention, località.
Esempio: Backup completo ogni giorno (incrementale) e database ogni 6 ore. Conservare le copie per 30 giorni su un cloud esterno (es. AWS S3, Google Drive) separato dal server web.
5. Protezione del Server e File System
Permessi File
Parametri: Permessi octal per directory e file.
Esempio: Cartelle: 755, File: 644, wp-config.php: 600 (leggibile solo dal proprietario, non dal gruppo o pubblico).
Protezione wp-config.php
Parametri: Regole di accesso.
Esempio: Spostare il file una directory sopra la root pubblica (es. da /public_html/wp-config.php a /home/user/wp-config.php) e aggiornare il path nel codice, OPPURE aggiungere regole .htaccess per negare l’accesso diretto: Deny from all.
Disabilitare Directory Listing
Parametri: Opzione server.
Esempio: In Apache: Options -Indexes. In Nginx: autoindex off;.
Protezione xmlrpc.php
Parametri: Blocco totale o parziale.
Esempio: Se non si usano app mobili o pingback, bloccare completamente l’accesso a questo file tramite .htaccess o firewall.
6. Database e Codice
Prefisso Tabelle
Parametri: Stringa prefisso.
Esempio: Durante l’installazione, usare wp_abc123_ invece del default wp_.
Disabilitare XML-RPC
Parametri: Blocco endpoint.
Esempio: Se non necessario, bloccare tutte le richieste POST a xmlrpc.php.
Disabilitare Editor Tema/Plugin
Parametri: Costante PHP.
Esempio: Aggiungere define( ‘DISALLOW_FILE_EDIT’, true ); nel file wp-config.php. Questo impedisce di modificare il codice direttamente dalla dashboard.
7. Monitoraggio e Log
Log di Sicurezza
Parametri: Cosa registrare, conservazione.
Esempio: Registrare tutti i tentativi di login (falliti e riusciti), cambi di ruolo utente, installazione/disinstallazione plugin. Conservare i log per 90 giorni (o meno, in base a valutazione delle norme sulla protezione dei dati personali, ricordando che l’IP viene considerato un dato personale in quanto permette di risalire indirettamente all’identità di una persona fisica).
Alert in Tempo Reale
Parametri: Trigger per notifiche.
Esempio: Inviare email immediata all’amministratore se: 1) Un nuovo utente viene creato, 2) Viene modificato un file core, 3) Ci sono 5+ tentativi di login falliti in 1 minuto.
8. Altre Misure Avanzate
WAF (Web Application Firewall)
Parametri: Regole di filtraggio.
Esempio: Configurare regole per bloccare payload noti di SQL Injection (es. stringhe come ‘ OR 1=1) e XSS (<script>).
Mai scordare che il primo firewall è il cervello, quindi nel monitoraggio bisogna valutare le singole situazioni ed evitare di cliccare su link in email di phishing.
CDN con Protezione
Parametri: Regole di caching e sicurezza.
Esempio: Usare plugin tipo Cloudflare con “Under Attack Mode” attivo se si rileva un attacco DDoS. Abilitare “Bot Fight Mode” per bloccare bot malevoli. Vi sono molti plugin come ad esempio Sucuri. Tali plugin spesso hanno delle funzionalità gratuite ed altre a pagamento. Un consulente può aiutare a valutare quale plugin sia meglio utilizzare per uno specifico sito internet
Principio del Minimo Privilegio
Parametri: Assegnazione ruoli.
Esempio: Non usare mai l’account Amministratore per aggiornare meramente un articolo. Creare un utente con ruolo “Editore” per scrivere articoli e un utente “Collaboratore” per chi deve solo inviare bozze.
Questi parametri creano una difesa stratificata. Valori troppo restrittivi (es. bloccare dopo 2 tentativi) potrebbero infastidire o limitare utenti legittimi, mentre valori troppo ampi lasciano spazio agli attaccanti. Il bilanciamento è fondamentale e da ponderare con grande attenzione.
Importante evitare il fai da te se non si è tecnicamente preparati e affidarsi ad un consulente esperto sia a livello di sicurezza informatica sia a livello di privacy e protezione dei dati personali.