Mettere in sicurezza WordPress (e WooCommerce) non richiede magie: serve una checklist chiara, eseguita con costanza. Qui trovi le azioni prioritarie per ridurre superfici d’attacco, prevenire malware e proteggere dati e vendite.
TL;DR (priorità massime)
- Aggiornamenti regolari (core, tema, plugin) con test su staging.
- 2FA per admin/editor e ruoli minimi per tutti.
- Backup off-site con ripristino verificato e retention differenziata.
- Firewall applicativo (WAF), blocco bot e rate-limit sul login.
- Blocca PHP in /uploads, permessi file corretti, DISALLOW_FILE_EDIT.
- Cache/CDN configurati senza esporre admin, REST e webhook.
1) Aggiornamenti e inventario
- Mantieni WordPress, tema e plugin aggiornati. Elimina plugin/temi non usati.
- Usa uno staging per testare update (specie WooCommerce e gateway).
2) Utenti, ruoli e MFA
- Rimuovi l’utente admin generico, crea account nominativi.
- Applica il principio del minimo privilegio (Editor, Shop Manager, ecc.).
- Abilita 2FA per amministratori e redattori; applica policy password robuste.
- Revoca accessi inutilizzati e Application Passwords non più necessarie.
3) Login, brute force e XML-RPC
- Imposta rate limit e blocco IP su login e
wp-login.php
. - Valuta la rinomina del percorso di login (misura di “stealth”, non sicurezza assoluta).
- Disabilita o limita XML-RPC (consenti solo funzioni necessarie o IP allowlist).
- Aggiungi reCAPTCHA/hCaptcha su login/moduli se subisci bot.
4) File system e permessi
- Permessi consigliati: 644 file, 755 cartelle; proprietà coerenti con l’utente del web server.
- Blocca l’esecuzione PHP in
/wp-content/uploads/
e cache temporanee.
Reimpostare i permessi di WordPress: guida pratica
I permessi corretti riducono i rischi di esecuzione non autorizzata e gli errori “Permesso negato”. Regola d’oro: cartelle 755, file 644, wp-config.php
640 (o 600 dove possibile). Mai 777.
Cartelle:
755
• File: 644
• wp-config.php
: 640/600
• .htaccess
(solo Apache): 644
A) FTP (FileZilla/WinSCP) – semplice e sicuro
- Connettiti alla root del sito (es.
public_html
). - Cartelle: seleziona tutte le directory → tasto destro Permessi → valore 755 → Ricorsivo: solo directory.
- File: seleziona tutti i file → Permessi → valore 644 → Ricorsivo: solo file.
- Imposta manualmente:
wp-config.php
640/600,.htaccess
644.
B) cPanel (Terminal/SSH) – veloce e completo
cPanel → Terminal / SSH Access, poi esegui dalla docroot (es. ~/public_html
):
1 2 3 4 5 6 7 8 9 10 11 12 |
cd ~/public_html # Cartelle 755 find . -type d -exec chmod 755 {} \; # File 644 find . -type f -exec chmod 644 {} \; # File sensibili chmod 640 wp-config.php 2>/dev/null || true [ -f .htaccess ] && chmod 644 .htaccess |
Tip: se incontri problemi di scrittura, chiedi all’hosting di riallineare l’ownership (utente del tuo account).
C) Plesk
Metodo SSH (consigliato): Plesk → Hosting → Accesso SSH, poi:
1 2 3 4 5 6 7 8 |
cd /var/www/vhosts/tuodominio.tld/httpdocs find . -type d -exec chmod 755 {} \; find . -type f -exec chmod 644 {} \; chmod 640 wp-config.php 2>/dev/null || true [ -f .htaccess ] && chmod 644 .htaccess |
Metodo File Manager (GUI): seleziona gruppi di cartelle → Cambia autorizzazioni → 755; gruppi di file → 644; poi imposta a parte wp-config.php
640/600 e .htaccess
644.
Su Plesk Windows vedrai ACL (permessi per utente/gruppo) invece dei numeri: mantieni lettura/scrittura solo all’utente dell’app, niente esecuzione dove non serve.
D) WP-CLI: cosa puoi fare
WP-CLI non cambia i permessi in massa, ma con SSH puoi combinare i comandi shell sopra. Per singoli file:
1 2 3 4 |
# esempi mirati (non ricorsivi) wp eval 'chmod("wp-config.php", 0640);' wp eval 'if (file_exists(".htaccess")) chmod(".htaccess", 0644);' |
Verifiche finali (2 minuti)
- Carica un’immagine in Media e salva un articolo: se fallisce, controlla
wp-content/uploads
(cartelle 755, file 644). - Su Nginx non esiste
.htaccess
: ignora quel file, gestisci le regole nel vhost. - Plugin di cache/backup: verifica che possano scrivere nelle proprie directory (cartelle 755).
Bloccare l’esecuzione di PHP in /uploads (extra sicurezza)
Apache (.htaccess):
1 2 3 4 |
<FilesMatch "\.php$"> Deny from all </FilesMatch> |
Nginx:
1 2 |
location ~* ^/wp-content/uploads/.*\.php$ { return 403; } |
5) wp-config.php: impostazioni di hardening
1 2 3 4 5 6 |
define('DISALLOW_FILE_EDIT', true); define('FORCE_SSL_ADMIN', true); // Disattiva debug in produzione define('WP_DEBUG', false); // Chiavi e SALTS: rigenerale da generator ufficiale |
6) Firewall applicativo e protezione a livello edge
- Attiva un WAF (plugin o edge/CDN) con regole per SQLi/XSS, file upload e brute force.
- Imposta rate limiting per endpoint sensibili (login, XML-RPC, API REST pubbliche).
- Blocca user-agent malevoli e scansioni automatiche.
7) Backup e ripristino
- Backup 3-2-1 (almeno una copia off-site in Cloud UE), con restore test periodico.
- Retention differenziata (es. 7/30/90 giorni) e cifratura dei backup.
8) Monitoraggio e malware scan
- Abilita file change detection (monitor modifiche in
wp-content
e core). - Scan ricorrenti di malware e controlli su .htaccess/web.config.
- Allarmi su errori 5xx, picchi di spam, redirect sospetti.
9) WooCommerce: attenzioni extra
- Verifica webhook (pagamenti, Subscriptions) e proteggili con firma/allowlist IP.
- Checkout sempre fuori cache; escludi
wc-ajax=*
e cookie carrello. - Riduci plugin superflui in checkout e limita script non essenziali (migliora sicurezza e INP).
10) HTTP Security Headers (avanzato)
- HSTS (solo dopo pieno supporto HTTPS), Referrer-Policy, X-Content-Type-Options.
- Content-Security-Policy (CSP) graduale per mitigare XSS e script terzi invasivi.
Checklist rapida stampabile
- Aggiornamenti e rimozione bloat (plugin/temi inutilizzati)
- 2FA + ruoli minimi + password policy
- WAF + rate limit login/XML-RPC
- Permessi 644/755 e PHP bloccato in /uploads
- wp-config: DISALLOW_FILE_EDIT, FORCE_SSL_ADMIN, SALTS aggiornate
- Backup off-site + restore test trimestrale
- Monitor file/log + scan malware ricorrente
- Regole cache sicure per WooCommerce + webhook protetti
Vuoi un hardening “senza sorprese”? Posso applicare questa checklist, impostare WAF e backup off-site e rilasciare un report con priorità e prove di mitigazione.
FAQ
Rinominare l’URL di login basta a proteggere il sito?
No: è solo “security by obscurity”. Serve insieme a 2FA, rate limiting, WAF e password robuste.
Posso disattivare completamente XML-RPC?
Sì, se non usi app/integrazioni che lo richiedono. In alternativa, limita per IP o disabilita metodi non necessari.
Il blocco di PHP in uploads può causare problemi?
Solo se carichi script lato server (pratica sconsigliata). Per i normali media non comporta alcun rischio.
Programmatore WordPress Esperto WooCommerce
Sono l’autore di questo blog con tanti trucchi e guide su WordPress e WooCommerce.