Вопрос или проблема
Я просмотрел логи моего веб-сервера и нашел несколько внутренних ошибок, которые хотел бы исправить. Отметьте, что сайт сам по себе работает совершенно нормально, то есть обычный пользователь не заметит никакой разницы. Я просто вижу в своем логе, что регулярно (каждые несколько дней) возникает внутренняя ошибка 500. Я предполагаю, что это вызвано автоматическими сканированиями ботов, но я все же хотел бы исправить это правильно.
При доступе к URL:
https://mydomain.com/wp-includes/Requests/src/Proxy/Http.php
Для следующих URI:
/wp-includes/Requests/src/Proxy/Http.php
/wp-includes/html-api/html5-named-character-references.php
(и любой другой файл вhtml-api
)/wp-includes/Requests/src/Auth/Basic.php
Происходит ошибка, которая выглядит следующим образом (в /var/log/apache2/error.log
):
[Thu Jan 02 15:12:18.866235 2025] [php7:error] [pid 754932] [client XXX] PHP Fatal error: Uncaught Error: Interface 'WpOrg\\Requests\\Proxy' not found in /var/www/html/wp-includes/Requests/src/Proxy/Http.php:24\nStack trace:\n#0 {main}\n thrown in /var/www/html/wp-includes/Requests/src/Proxy/Http.php on line 24
[Thu Jan 02 15:12:20.611898 2025] [php7:error] [pid 754907] [client XXX] PHP Fatal error: Uncaught Error: Class 'WP_Token_Map' not found in /var/www/html/wp-includes/html-api/html5-named-character-references.php:38\nStack trace:\n#0 {main}\n thrown in /var/www/html/wp-includes/html-api/html5-named-character-references.php on line 38
Все файлы присутствуют и имеют то же содержимое, что и новая установка WordPress (но я все равно попытался полностью переустановить WordPress, как указано ниже)
О моей настройке
Я использую multisite. Все остальное редко бывает базовым. Некоторые другие внутренние ошибки могли быть исправлены с использованием обновленного .htaccess
отсюда здесь, но указанные выше остались.
Что я уже пробовал
Я сделал все следующее и проверял страницы после каждой модификации, но
- Деактивировать все плагины (в wp-admin)
- Активировать тему по умолчанию (twentytwentyfive)
- Остановить веб-сервер
- Создать резервную копию всех файлов
- Создать резервную копию базы данных
- Удалить все файлы, кроме
wp-content/
- Переустановить WordPress (
sudo -u www-data wp core download --force --skip-content
) - Добавить минимальный
.htaccess
- Сгенерировать новый
wp-config.php
:sudo -u www-data wp config create ...
- Обновить wp-config.php со старыми настройками. (Включить multisite)
- Запустить веб-сервер
- Тест
–> Ошибки все равно возникали, как и прежде
Текущее обходное решение
Добавление следующего блока в мой основной .htaccess
заменяет ошибку на 403 Forbidden
. Однако я хотел бы знать, есть ли лучший способ решить эту проблему, чем блокировать прямой доступ к файлу.
########################################
# Блокировать прямой доступ к папке includes
########################################
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^wp-admin/includes/ - [F,L]
RewriteRule !^wp-includes/ - [S=5]
RewriteRule ^wp-includes/[^/]+\.php$ - [F,L]
RewriteRule ^wp-includes/js/tinymce/langs/.+\.php - [F,L]
RewriteRule ^wp-includes/theme-compat/ - [F,L]
RewriteRule ^wp-includes/Requests/.*\.php$ - [F,L]
RewriteRule ^wp-includes/html-api/.*$ - [F,L]
</IfModule>
Т.е., является ли блокирование прямого доступа к файлам, вызывающим ошибки, наилучшим решением, и не создаст ли оно других проблем, или есть лучший способ справиться с этим?
Ответ или решение
Ошибки, подобные "Uncaught Error: Interface ‘…’ not found", могут возникать по разным причинам, особенно в среде с WordPress, где множество файлов и модулей взаимодействуют друг с другом. В вашем случае, учитывая природу ошибки и тот факт, что проблема не влияет на видимую работу сайта, следует обратить внимание на ряд технических аспектов, чтобы устранить проблему и предотвратить её повторное возникновение.
Шаги для решения проблемы:
-
Проблема доступа к файлам:
Ошибка возникает при прямом доступе к файлам в директорияхwp-includes/Requests/src/Proxy
иwp-includes/html-api
. Это указывает на попытки получить доступ или включить файлы напрямую, что может происходить в результате бот-сканирования. Заголовок ошибки "Interface ‘WpOrg\Requests\Proxy’ not found" предполагает, что эти файлы ожидают загрузки в контексте WordPress. -
Использование .htaccess для блокировки доступа:
Ваша текущая мера по блокировке доступа через.htaccess
— это разумное решение для предотвращения непосредственного доступа к файлам. Однако важно убедиться, что правильно настроены правила, чтобы не нарушить легитимные процессы.Ваши правила .htaccess:
<IfModule mod_rewrite.c> RewriteEngine On RewriteBase / RewriteRule ^wp-admin/includes/ - [F,L] RewriteRule !^wp-includes/ - [S=5] RewriteRule ^wp-includes/[^/]+\.php$ - [F,L] RewriteRule ^wp-includes/js/tinymce/langs/.+\.php - [F,L] RewriteRule ^wp-includes/theme-compat/ - [F,L] RewriteRule ^wp-includes/Requests/.*\.php$ - [F,L] RewriteRule ^wp-includes/html-api/.*$ - [F,L] </IfModule>
Эти правила блокируют неавторизованный доступ, при этом не создавая видимых ограничений для работы сайта.
-
Проверка плагинов и тем:
Хотя вы уже пробовали деактивировать плагины и темы, возможно, стоит проверить конфигурацию автозагрузки PHP. Иногда сторонние плагины или темы могут вызывать автозагрузку фрагментов кода из нестандартных местоположений. -
Обновление и проверка автозагрузки:
Убедитесь, что автозагрузка настроена правильно. Это можно сделать через composer или ручное редактирование autoload файлов, следя, чтобы отсутствовали некорректные namespace и пути к файлам. -
Мониторинг через Web Application Firewall (WAF):
Поддержание безопасного окружения может включать использование WAF, который отслеживает и блокирует подозрительные активности, такие как бот-сканирования. -
Проверка на наличие зловредного кода:
Проверьте код на наличие вредоносных вставок, которые могут вызывать такие ошибки или спровоцировать их появление.
Заключение
Непосредственный доступ к внутренним файлам WordPress всегда должен быть ограничен, чтобы снизить риски и обеспечить безопасность сайта. Блокировка через .htaccess является общераспространенной практикой и не должна иметь отрицательных последствий, если настроена корректно. Последите за обновлениями системы безопасности и старайтесь соблюдать рекомендованные практики работы с WordPress.