Impedire l'accesso o eliminare automaticamente readme.html, license.txt, wp-config-sample.php
Solo una rapida domanda che potrebbe aiutare un po' con la sicurezza. Ho notato che il file readme.html contiene il numero della versione. Ricompare dopo ogni aggiornamento, così come license.txt e wp-config-sample.php.
Esiste un modo semplice per far sì che WordPress rimuova automaticamente questi file dopo un aggiornamento?
Ho già bloccato la visualizzazione del numero di versione nei meta tag, feed RSS, atom, ecc.
Sono consapevole che questo tipo di sicurezza non è esattamente così utile, ma ho pensato che potrebbe essere un piccolo inizio. Ho sentito che le persone possono semplicemente controllare la versione di jQuery inclusa in WP-includes e incrociarla con la versione di WP che lo includeva.
Non è davvero necessario rimuovere questi file. È molto più semplice bloccare l'accesso ad essi. Se stai utilizzando URL ottimizzati, avrai già un file .htaccess. Usare .htaccess per bloccare i file è sicuro e devi solo aggiungere una direttiva una volta sola.
Il blocco dei file si effettua aggiungendo una direttiva a .htaccess in questo modo:
<files filename.file-extension>
order allow,deny
deny from all
</files>
Quindi, per bloccare readme.html fai così:
<files readme.html>
order allow,deny
deny from all
</files>
Fai lo stesso con il file di licenza o qualsiasi altro file a cui vuoi impedire l'accesso. Basta aprire .htaccess con Blocco note o qualsiasi altro editor di testo di base, aggiungere le direttive e salvare, assicurandoti che l'editor di testo mantenga esattamente il nome del file - senza alcun .txt alla fine.

Attenzione, la sintassi sopra indicata è valida solo fino ad Apache 2.2! Per le versioni successive (Apache 2.4 e oltre) utilizzate Require all denied
(sostituendo quelle due righe interne). Maggiori dettagli qui

Ecco la mia soluzione:
RewriteRule (?:readme|license|changelog|-config|-sample)\.(?:php|md|txt|html?) - [R=404,NC,L]
- 404 (non esistente) anziché 403 (vietato) per evitare qualsiasi indizio sull'esistenza.
- anche nelle sottocartelle (es. temi e plugin, che potrebbero offrire opportunità di attacco)
- insensibile alle maiuscole/minuscole, estensione flessibile, intercetta anche README.html o license.html (sentiti libero di aggiungere i soliti sospetti come changelogs|faq|contributing)
Personalmente, bloccherei anche:
RewriteRule \.(?:psd|log|cmd|exe|bat|c?sh)$ - [NC,F]
Nota:
- '?:' dichiara semplicemente che la parentesi non è da considerare per il matching (nessuna importanza).
- richiede che RewriteEngine sia
on
(molto probabilmente lo è. Sarebbe raro usare WordPress senza... (permalink brutti, ecc...)). - inserisci prima della sezione
# BEGIN WordPress
nel tuo file .htaccess

Grazie, ho capito la funzionalità php unlink e funziona, ma c'è un problema. L'hook che hai fornito sembra eseguirsi semplicemente visitando la sezione Aggiornamenti nel Pannello di controllo. C'è un altro hook per dopo che l'aggiornamento è avvenuto?

Soluzione 2023
Se utilizzi Apache
, attualmente nella versione 2.4.5x
, come tuo web server e vuoi seguire il percorso del file ".htaccess"
, allora ecco alcune opzioni (in aggiunta alla risposta di Frank) per farlo:
Restituire "Forbidden"
all'utente:
In questo caso, l'"utente"/"hacker"/"avversario"/"pentester" capirebbe che questi file esistono sul tuo server ma non ha accesso ad essi!
<FilesMatch "(?:readme|license|changelog|-config|-sample)\.(?:php|md|txt|html?)">
Require all denied
</FilesMatch>
Restituire "404"
all'utente:
In questo caso, teoricamente, l'"utente"/"hacker"/"avversario"/"pentester" assumerebbe che questi file non esistano affatto sul tuo server!
<FilesMatch "(?:readme|license|changelog|-config|-sample)\.(?:php|md|txt|html?)">
Redirect 404
</FilesMatch>

Soluzione attuale per WordPress, aggiornata al 2025
Sto combinando le risposte/commenti precedenti e applicandoli alla domanda effettiva (oltre a risolvere anche i problemi di sicurezza delle risposte precedenti).
RewriteRule (?:readme|license|changelog|-config|-sample)\.(?:php|md|txt|html?) index.php [L]
RewriteRule \.(?:psd|log|cmd|exe|bat|c?sh)$ index.php [L]
Usando index.php [L]
tutto verrà reindirizzato a WordPress come pagina 404 del sito, invece di mostrare la pagina di errore 403/404/etc del server web. In questo modo, il potenziale hacker non vedrà il cambiamento nella pagina di errore visualizzata.
