Запретить доступ или автоматически удалять readme.html, license.txt, wp-config-sample.php

15 дек. 2010 г., 11:53:00
Просмотры: 19.6K
Голосов: 16

Быстрый вопрос, который может немного помочь с безопасностью. Я заметил, что файл readme.html содержит номер версии WordPress. Он появляется снова после каждого обновления, как и файлы license.txt и wp-config-sample.php.

Есть ли простой способ заставить WordPress автоматически удалять эти файлы после обновления?

Я уже отключил отображение номера версии в мета-тегах, RSS-лентах, Atom и т.д.

Я понимаю, что такая мера безопасности не дает сильного эффекта, но думаю, это может быть маленьким шагом. Я слышал, что люди могут просто проверить версию jQuery, включенную в WP-includes, и сопоставить ее с версией WordPress.

0
Все ответы на вопрос 5
2
22

Вам на самом деле не нужно удалять эти файлы. Гораздо проще просто заблокировать к ним доступ. Если вы используете красивые 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 в конце.

15 мая 2011 г. 15:22:53
Комментарии

В итоге я выбрал именно этот вариант. Он работает безупречно.

Sahas Katta Sahas Katta
16 мая 2011 г. 07:49:06

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

Frank N Frank N
7 мар. 2017 г. 09:00:57
1

Вот мой вариант:

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
6 сент. 2015 г. 09:44:36
Комментарии

Есть ли преимущества использования RewriteRule вместо FilesMatch?

Prof. Moriarty Prof. Moriarty
27 сент. 2023 г. 22:10:13
4
add_action('core_upgrade_preamble','my_function_to_delete_files');

Редактирование: вы также можете попробовать эти варианты

add_action('upgrader_pre_install','my_function_to_delete_files');
add_action('upgrader_post_install','my_function_to_delete_files');
15 дек. 2010 г. 12:37:46
Комментарии

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

Sahas Katta Sahas Katta
15 дек. 2010 г. 22:16:31

я посмотрю и дам вам знать

Atif Atif
16 дек. 2010 г. 12:23:40

@Sahas @atif089 Вам удалось заставить это работать?

INT INT
12 мая 2011 г. 13:38:20

Вместо удаления (если вы хотите действительно прочитать readme!) вы можете использовать это в своей функции chmod("/path/to/readme.txt", 0640);

Bysander Bysander
10 окт. 2016 г. 15:07:38
0

Решение на 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>
21 июл. 2023 г. 13:46:25
0

Актуальное решение для 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 веб-сервера. Таким образом, потенциальный хакер не увидит изменения в отображаемой странице ошибки.

30 мар. 2025 г. 20:25:50