Необрабатываемая ошибка: Интерфейс ‘…’ не найден для прямого доступа к файлам wp-includes.

Вопрос или проблема

Я просмотрел логи моего веб-сервера и нашел несколько внутренних ошибок, которые хотел бы исправить. Отметьте, что сайт сам по себе работает совершенно нормально, то есть обычный пользователь не заметит никакой разницы. Я просто вижу в своем логе, что регулярно (каждые несколько дней) возникает внутренняя ошибка 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 отсюда здесь, но указанные выше остались.

Что я уже пробовал

Я сделал все следующее и проверял страницы после каждой модификации, но

  1. Деактивировать все плагины (в wp-admin)
  2. Активировать тему по умолчанию (twentytwentyfive)
  3. Остановить веб-сервер
  4. Создать резервную копию всех файлов
  5. Создать резервную копию базы данных
  6. Удалить все файлы, кроме wp-content/
  7. Переустановить WordPress (sudo -u www-data wp core download --force --skip-content)
  8. Добавить минимальный .htaccess
  9. Сгенерировать новый wp-config.php: sudo -u www-data wp config create ...
  10. Обновить wp-config.php со старыми настройками. (Включить multisite)
  11. Запустить веб-сервер
  12. Тест

–> Ошибки все равно возникали, как и прежде

Текущее обходное решение

Добавление следующего блока в мой основной .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, где множество файлов и модулей взаимодействуют друг с другом. В вашем случае, учитывая природу ошибки и тот факт, что проблема не влияет на видимую работу сайта, следует обратить внимание на ряд технических аспектов, чтобы устранить проблему и предотвратить её повторное возникновение.

Шаги для решения проблемы:

  1. Проблема доступа к файлам:
    Ошибка возникает при прямом доступе к файлам в директориях wp-includes/Requests/src/Proxy и wp-includes/html-api. Это указывает на попытки получить доступ или включить файлы напрямую, что может происходить в результате бот-сканирования. Заголовок ошибки "Interface ‘WpOrg\Requests\Proxy’ not found" предполагает, что эти файлы ожидают загрузки в контексте WordPress.

  2. Использование .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>

    Эти правила блокируют неавторизованный доступ, при этом не создавая видимых ограничений для работы сайта.

  3. Проверка плагинов и тем:
    Хотя вы уже пробовали деактивировать плагины и темы, возможно, стоит проверить конфигурацию автозагрузки PHP. Иногда сторонние плагины или темы могут вызывать автозагрузку фрагментов кода из нестандартных местоположений.

  4. Обновление и проверка автозагрузки:
    Убедитесь, что автозагрузка настроена правильно. Это можно сделать через composer или ручное редактирование autoload файлов, следя, чтобы отсутствовали некорректные namespace и пути к файлам.

  5. Мониторинг через Web Application Firewall (WAF):
    Поддержание безопасного окружения может включать использование WAF, который отслеживает и блокирует подозрительные активности, такие как бот-сканирования.

  6. Проверка на наличие зловредного кода:
    Проверьте код на наличие вредоносных вставок, которые могут вызывать такие ошибки или спровоцировать их появление.

Заключение

Непосредственный доступ к внутренним файлам WordPress всегда должен быть ограничен, чтобы снизить риски и обеспечить безопасность сайта. Блокировка через .htaccess является общераспространенной практикой и не должна иметь отрицательных последствий, если настроена корректно. Последите за обновлениями системы безопасности и старайтесь соблюдать рекомендованные практики работы с WordPress.

Оцените материал
Добавить комментарий

Капча загружается...