Prevenire acces sau ștergere automată a fișierelor readme.html, license.txt, wp-config-sample.php
Doar o întrebare rapidă care ar putea ajuta puțin la securitate. Am observat că fișierul readme.html afișează numărul versiunii. Acesta reapare după fiecare actualizare, la fel ca și fișierele licence.txt și wp-config-sample.php.
Există o metodă simplă prin care WordPress să șteargă automat aceste fișiere după o actualizare?
Deja am blocat afișarea numărului de versiune în meta tag-uri, fluxuri RSS, atom etc.
Știu că acest tip de măsură de securitate nu este chiar atât de util, dar am crezut că ar putea fi un mic început. Am auzit că oamenii pot pur și simplu verifica versiunea jQuery inclusă în WP-includes și să o coreleze cu versiunea WordPress care o include.

Nu este nevoie să eliminați aceste fișiere. Este mult mai ușor să blocați accesul la ele. Dacă utilizați URL-uri prietenoase, aveți deja un fișier .htaccess. Folosirea .htaccess pentru a bloca fișierele este sigură și trebuie să adăugați o directivă doar o singură dată.
Blocarea fișierelor se face prin adăugarea unei directive în .htaccess astfel:
<files nume-fisier.extensie>
order allow,deny
deny from all
</files>
Deci, pentru a bloca readme.html, faceți astfel:
<files readme.html>
order allow,deny
deny from all
</files>
Faceți același lucru cu fișierul de licență sau orice alt fișier la care doriți să împiedicați accesul. Deschideți .htaccess în Notepad sau orice alt editor de text simplu, adăugați directivele și salvați, asigurându-vă că editorul de text păstrează exact numele fișierului - fără adăugarea .txt la final.

Aceasta este de fapt opțiunea pe care am ales-o în final. Funcționează perfect.

Atenție, sintaxa de mai sus este valabilă doar până la Apache 2.2! După aceea, pentru Apache 2.4 și versiuni superioare, folosiți Require all denied
(înlocuind acele 2 linii interioare). Mai multe detalii aici

Iată propunerea mea:
RewriteRule (?:readme|license|changelog|-config|-sample)\.(?:php|md|txt|html?) - [R=404,NC,L]
- 404 (nu există) în loc de 403 (interzis) pentru a evita orice indiciu privind existența fișierelor.
- se aplică și în subdirectoare (de ex. teme și plugin-uri, care ar putea oferi oportunități de atac)
- nu ține cont de majuscule/minuscule, extensii flexibile, prinde și README.html sau license.html (puteți adăuga alte tipuri de fișiere precum changelogs|faq|contributing)
Personal, aș bloca și:
RewriteRule \.(?:psd|log|cmd|exe|bat|c?sh)$ - [NC,F]
Notă:
- '?:' declară doar că paranteza nu este de potrivire (fără importanță).
- necesită ca RewriteEngine să fie
on
(cel mai probabil este. ar fi neobișnuit să folosești WordPress fără... (permalink-uri urâte, etc.)). - introduceți înainte de secțiunea
# BEGIN WordPress
din fișierul .htaccess

add_action('core_upgrade_preamble','functia_mea_pentru_stergerea_fisierelor');
Editare: poți încerca și aceste variante
add_action('upgrader_pre_install','functia_mea_pentru_stergerea_fisierelor');
add_action('upgrader_post_install','functia_mea_pentru_stergerea_fisierelor');

Mulțumesc, am descoperit funcția php unlink și funcționează, dar apare o problemă. Hook-ul pe care l-ai oferit pare să se execute doar prin vizitarea secțiunii Updates din Dashboard. Există alt hook pentru momentul de după actualizare?

Soluția pentru 2023
Dacă folosești Apache
, în prezent pe versiunea 2.4.5x
, ca server web și dorești să utilizezi calea ".htaccess"
, atunci iată câteva opțiuni (în plus față de răspunsul lui Frank) pentru a face acest lucru:
Returnarea mesajului "Forbidden"
utilizatorului:
În acest caz, "utilizatorul"/"hackerul"/"adversarul"/"pentesterul" va afla că aceste fișiere există pe serverul tău, dar nu are acces la ele!
<FilesMatch "(?:readme|license|changelog|-config|-sample)\.(?:php|md|txt|html?)">
Require all denied
</FilesMatch>
Returnarea erorii "404"
utilizatorului:
În acest caz, "utilizatorul"/"hackerul"/"adversarul"/"pentesterul", teoretic, va presupune că aceste fișiere nici măcar nu există pe serverul tău!
<FilesMatch "(?:readme|license|changelog|-config|-sample)\.(?:php|md|txt|html?)">
Redirect 404
</FilesMatch>

Soluție Actuală WordPress, Actualizată 2025
Combin răspunsurile/comentariile anterioare și le aplic la întrebarea actuală (precum și abordând preocupările legate de securitate din răspunsurile anterioare).
RewriteRule (?:readme|license|changelog|-config|-sample)\.(?:php|md|txt|html?) index.php [L]
RewriteRule \.(?:psd|log|cmd|exe|bat|c?sh)$ index.php [L]
Folosirea index.php [L]
va direcționa totul către WordPress ca pagină 404 a site-ului WordPress, în loc să afișeze pagina de eroare 403/404/etc a serverului web. Făcând acest lucru, potențialul hacker nu va observa schimbarea paginii de eroare afișate.
