Запретить доступ или автоматически удалять readme.html, license.txt, wp-config-sample.php
Быстрый вопрос, который может немного помочь с безопасностью. Я заметил, что файл readme.html содержит номер версии WordPress. Он появляется снова после каждого обновления, как и файлы license.txt и wp-config-sample.php.
Есть ли простой способ заставить WordPress автоматически удалять эти файлы после обновления?
Я уже отключил отображение номера версии в мета-тегах, RSS-лентах, Atom и т.д.
Я понимаю, что такая мера безопасности не дает сильного эффекта, но думаю, это может быть маленьким шагом. Я слышал, что люди могут просто проверить версию jQuery, включенную в WP-includes, и сопоставить ее с версией WordPress.

Вам на самом деле не нужно удалять эти файлы. Гораздо проще просто заблокировать к ним доступ. Если вы используете красивые URL, у вас уже есть файл .htaccess. Использование .htaccess для блокировки файлов безопасно, и вам нужно добавить директиву всего один раз.
Блокировка файлов осуществляется добавлением директивы в .htaccess следующим образом:
<files имя-файла.расширение>
order allow,deny
deny from all
</files>
Таким образом, чтобы заблокировать readme.html, сделайте следующее:
<files readme.html>
order allow,deny
deny from all
</files>
То же самое сделайте с файлом лицензии или любым другим файлом, доступ к которому вы хотите запретить. Просто откройте .htaccess в Блокноте или любом другом простом текстовом редакторе, добавьте директивы и сохраните, убедившись, что текстовый редактор сохраняет имя файла точно — без добавления .txt в конце.

Внимание, указанный синтаксис действителен только для Apache 2.2 и ниже! В Apache 2.4 и выше используйте Require all denied
(заменив эти две внутренние строки). Подробнее здесь

Вот мой вариант:
RewriteRule (?:readme|license|changelog|-config|-sample)\.(?:php|md|txt|html?) - [R=404,NC,L]
- 404 (не существует) вместо 403 (запрещено), чтобы не давать подсказок о существовании файлов.
- также применяется к подпапкам (например, темы и плагины, которые могут представлять возможности для атак)
- регистронезависимый, гибкий к расширениям, также перехватывает README.html или license.html (можно добавить типичные подозрительные файлы, такие как changelogs|faq|contributing)
Лично я бы также заблокировал:
RewriteRule \.(?:psd|log|cmd|exe|bat|c?sh)$ - [NC,F]
Примечания:
- '?:' просто объявляет скобку как несохраняющую (не имеет значения).
- требует, чтобы RewriteEngine был
on
(скорее всего, так и есть. Редко используется WordPress без этого... (некрасивые постоянные ссылки и т.д.)). - вставьте перед секцией
# BEGIN WordPress
в вашем .htaccess

Спасибо, я разобрался с функцией php unlink, и она работает, но есть одна проблема. Хук, который вы предоставили, срабатывает просто при посещении раздела Обновления в панели Dashboard. Есть ли другой хук, который срабатывает после завершения обновления?

Решение на 2023 год
Если вы используете Apache
, в настоящее время на версии 2.4.5x
, в качестве веб-сервера и хотите пойти по пути настройки через ".htaccess"
, то вот несколько вариантов (в дополнение к ответу Франка):
Возврат статуса "Forbidden"
пользователю:
В этом случае "пользователь"/"хакер"/"злоумышленник"/"тестировщик" поймет, что эти файлы существуют на вашем сервере, но у него нет к ним доступа!
<FilesMatch "(?:readme|license|changelog|-config|-sample)\.(?:php|md|txt|html?)">
Require all denied
</FilesMatch>
Возврат статуса "404"
пользователю:
В этом случае "пользователь"/"хакер"/"злоумышленник"/"тестировщик", теоретически, предположит, что этих файлов вообще не существует на вашем сервере!
<FilesMatch "(?:readme|license|changelog|-config|-sample)\.(?:php|md|txt|html?)">
Redirect 404
</FilesMatch>

Актуальное решение для WordPress, обновлено 2025
Я объединяю предыдущие ответы/комментарии и применяю их к текущему вопросу (а также учитываю проблемы безопасности из предыдущих ответов).
RewriteRule (?:readme|license|changelog|-config|-sample)\.(?:php|md|txt|html?) index.php [L]
RewriteRule \.(?:psd|log|cmd|exe|bat|c?sh)$ index.php [L]
Использование index.php [L]
перенаправит все на WordPress, используя страницу 404 сайта, вместо отображения страницы ошибки 403/404 веб-сервера. Таким образом, потенциальный хакер не увидит изменения в отображаемой странице ошибки.
