Использование проверки на ABSPATH для предотвращения прямого доступа к PHP-файлам

Владислав Белецкий
Владислав Белецкий .
Категория:
Комментариев: 0

Всё началось с того, что один подписчик из комментериев попросил меня оценить сайты, которые он делал, и в момент, когда я хотел через исходный код открыть файл style.css темы, я случайно открыл папку с темой, т.е. обратился напрямую к index.php.

В итоге вот что у меня открылось:

Ну прежде всего, конечно, я бы отключил константу WP_DEBUG в файле wp-config.php. После этого, при попытке прямого доступа к файлу, так же на 1-й строчке будет выдаваться ошибка 500 и ничего дальше в целом происходить не будет. В целом практически все файлы тем WordPress содержат функции WordPress, поэтому вероятность того, что кто-то сможет навредить вашему сайту, не очень большая. Разве что боты переполнят ваши логи, открывая сотни раз файл с ошибкой 500.

Поэтому тут может быть две рекомендации, первая – в начале PHP-файлов темы и плагина поместите эти строчки:

if ( ! defined( 'ABSPATH' ) ) {
	die;
}

Они означают, что если константа ABSPATH не определена (она определяется в файле wp-config.php), то значит файл был запущен за пределами среды WordPress, а значит ничего не делаем и выходим из файла функцией exit() или die(). По логике вещей вы можете добавить эти строчки в начало каждого .php файла темы или плагина, которую вы разрабатываете. Однако, если вы скачаете какую-то тему или плагин WordPress, то заметите, что на практике так никто не делает, обычно проверку на константу ABSPATH мы находим только в тех .php-файлах, которые содержат классы (да и то не всегда).

Другая рекомендация – это запретить выполнение файлов PHP внутри темы или плагина, добавив следующую группу правил в файл .htaccess.

<Files *.php>
    Order Deny,Allow
    Deny from all
</Files>

В таком случае будем получать ответ Forbidden вместо ошибки 500. Тут важно быть осторожным, не содержит ли ваша тема каких-либо файлов PHP, к которым должен быть разрешён доступ напрямую (обработчики форм, вебхуки).

Ну и что делать то в итоге?

Да в общем можно ничего не делать, главное не забывайте отключать WP_DEBUG после разработки. Ну и конечно, если это не обычный файл темы, который начинается с get_header(), убедитесь, что в файле нет ввода/вывода, который можно использовать при взломе, иначе проверка на ABSPATH обязательна!

Я проанализировал несколько самых популярных сайтов на WordPress и нашёл все три подхода!

Подписаться
Уведомить о
guest
0 комментариев
Межтекстовые Отзывы
Посмотреть все комментарии