.htaccess con FilesMatch e lista di file consentiti
Un blocco FilesMatch che nomina file sconosciuti e li accompagna con Allow from all è l'inverso di una regola di sicurezza: invece di proteggere, garantisce che quelle webshell restino raggiungibili anche quando il resto della directory è chiuso. Nei casi trattati da WPsec.it lo stesso file è stato trovato replicato in migliaia di directory dello stesso sito.
Famiglia: Router backdoor multi-directory · Aggiornato il 30 agosto 2026
Le stringhe esatte
Se hai trovato una di queste stringhe sul tuo sito, sei nella pagina giusta.
<FilesMatch "lock360.php|wp-l0gin.php|jp.php|ext.php">Allow from all
Dove si trova
- Nella radice del sito e, soprattutto, replicato in centinaia o migliaia di sottodirectory
- In wp-content/uploads/, dove un .htaccess legittimo di solito blocca l'esecuzione di PHP invece di consentirla
- Accanto ai file che la regola stessa nomina
Cosa fa
- Crea un'eccezione esplicita per un elenco di file: qualunque restrizione generale della directory smette di valere per quei nomi.
- Rende l'accesso indipendente dalla configurazione del server: la regola viaggia con la cartella, quindi sopravvive a spostamenti e ripristini parziali.
- Distribuisce la persistenza: replicato ovunque, basta che una sola copia sfugga alla pulizia perché la backdoor resti pubblica.
Come verificare
Comandi di sola lettura: non modificano nulla. Sostituisci ESEMPIO.it con il tuo dominio ed esegui dalla radice del sito.
Trova ogni .htaccess che apre file specifici invece di chiuderli
grep -rl --include='.htaccess' -E 'FilesMatch.*\.(php|phtml)' . | xargs grep -l 'Allow from all'Conta quante copie dello stesso .htaccess esistono sul sito
find . -name '.htaccess' -exec md5sum {} + | awk '{print $1}' | sort | uniq -c | sort -rn | headVerifica se la directory di upload esegue PHP
grep -r 'php_flag engine\|SetHandler\|RemoveHandler' wp-content/uploads/ 2>/dev/null
Cosa non basta fare
- Ripulire il .htaccess nella radice. Le copie nelle sottodirectory continuano a funzionare da sole.
- Rigenerare i permalink dalla dashboard: riscrive solo il blocco WordPress della radice, non tocca le altre copie.
Cosa fare
- Conta le copie prima di toccarle: il numero dice se sei davanti a un incidente locale o a una persistenza distribuita.
- Confronta ogni .htaccess con quello atteso per quella directory; in wp-content/uploads/ una regola sana blocca l'esecuzione di PHP, non la consente.
- Rimuovi le regole e i file nominati nella stessa passata, poi verifica dall'esterno che gli URL non rispondano più.