Как исправить проблему открытых редиректов в WordPress

Открытые редиректы — одна из распространенных уязвимостей на сайтах WordPress, которая может привести к фишинговым атакам и потере доверия пользователей. В этой статье мы подробно рассмотрим, что такое открытые редиректы, почему они опасны и как с ними бороться на практике. Кроме того, приведем рабочие примеры функций и полезные плагины, которые помогут защитить ваш сайт.

Что такое открытый редирект и почему это опасно

Открытый редирект (open redirect) — это ситуация, когда сайт принимает URL для перенаправления из внешнего источника без должной проверки. Например, если пользователь вводит ссылку вроде https://example.com/redirect?url=http://malicious-site.com, а сайт просто перенаправляет на указанный в параметре адрес, это открытый редирект.

Опасность в том, что злоумышленники могут использовать такие ссылки, чтобы заставить пользователей перейти на вредоносные сайты, скрывая истинный адрес в ссылке, выглядящей как ваш домен. Это снижает доверие к вашему сайту и может привести к серьезным последствиям.

В WordPress открытые редиректы часто встречаются в функциях, использующих wp_safe_redirect() или wp_redirect() без проверки параметров, а также в некоторых плагинах, которые реализуют собственные механизмы редиректа.

Как выявить открытые редиректы на сайте — инструменты и методы

Первый шаг — проверить, есть ли у вас на сайте уязвимые редиректы. Сделать это можно с помощью специализированных сканеров безопасности, таких как:

  • WPScan с опцией проверки редиректов;
  • Burp Suite — профессиональный инструмент для анализа веб-приложений;
  • Онлайн-сервисы вроде Open Redirect Check;
  • Ручное тестирование с подстановкой различных URL в параметры редиректа.

Важно проверить как собственный код темы и плагинов, так и сторонние расширения. Часто уязвимости кроются именно в них.

Как защитить WordPress от открытых редиректов: практические советы

Для защиты от открытых редиректов надо в первую очередь внедрить проверку URL, на который выполняется перенаправление. Ниже приводим несколько подходов.

1. Использование wp_safe_redirect вместо wp_redirect

Функция wp_safe_redirect() проверяет, что URL для редиректа ведет на ваш домен или его поддомены. Это базовый способ избежать редиректов на внешние сайты.

function wp8_safe_redirect_example($url) {
    if (wp_safe_redirect($url)) {
        exit;
    } else {
        wp_die('Неверный URL для редиректа');
    }
}

Однако даже wp_safe_redirect не всегда покрывает все случаи, особенно если URL формируется динамически из входящих параметров.

2. Явная проверка URL на принадлежность к доверенному списку доменов

Можно реализовать функцию, которая проверит, что URL принадлежит вашему сайту или списку разрешенных доменов:

function wp8_is_allowed_redirect_url($url) {
    $allowed_hosts = array(parse_url(site_url(), PHP_URL_HOST));
    $host = parse_url($url, PHP_URL_HOST);
    return in_array($host, $allowed_hosts);
}

function wp8_safe_redirect_custom($url) {
    if (wp8_is_allowed_redirect_url($url)) {
        wp_redirect($url);
        exit;
    } else {
        wp_die('Редирект на внешний сайт запрещен');
    }
}

Этот метод более гибкий и позволяет контролировать редиректы точечно.

3. Очистка и фильтрация параметров редиректа

Если URL для редиректа приходит из GET или POST-запроса, никогда не используйте его без предварительной фильтрации и валидации. Например:

function wp8_get_safe_redirect_url() {
    $redirect_url = isset($_GET['redirect_to']) ? esc_url_raw($_GET['redirect_to']) : '';
    if (wp8_is_allowed_redirect_url($redirect_url)) {
        return $redirect_url;
    }
    return home_url(); // перенаправляем на главную, если URL не безопасен
}

Используйте эту функцию перед редиректом, чтобы гарантировать безопасность.

Полезные плагины для контроля и предотвращения открытых редиректов

Если вы не хотите писать код вручную, можно воспользоваться готовыми плагинами, которые помогут обнаружить и блокировать открытые редиректы:

  • Redirection — популярный плагин для управления редиректами, который умеет фильтровать и логировать редиректы;
  • WP Cerber Security — комплексный плагин безопасности с функциями защиты от различных атак, в том числе открытых редиректов;
  • Safe Redirect Manager — легкий плагин для безопасного управления редиректами с возможностью ограничивать URL.

При использовании плагинов важно тщательно настраивать параметры и периодически проверять логи на предмет подозрительных редиректов.

Пример реализации безопасного редиректа в пользовательском плагине WP8

Ниже пример минимального плагина, который обрабатывает параметр redirect_to и выполняет безопасный редирект с проверкой домена:

<?php
/**
 * Plugin Name: WP8 Safe Redirect
 * Description: Безопасный редирект с проверкой URL
 * Version: 1.0
 * Author: WP8.ru
 */

function wp8_is_allowed_redirect_url($url) {
    $allowed_hosts = array(parse_url(site_url(), PHP_URL_HOST));
    $host = parse_url($url, PHP_URL_HOST);
    return in_array($host, $allowed_hosts);
}

function wp8_handle_safe_redirect() {
    if (isset($_GET['redirect_to'])) {
        $redirect_url = esc_url_raw($_GET['redirect_to']);
        if (wp8_is_allowed_redirect_url($redirect_url)) {
            wp_redirect($redirect_url);
            exit;
        } else {
            wp_die('Недопустимый URL для редиректа.');
        }
    }
}
add_action('template_redirect', 'wp8_handle_safe_redirect');
?>

Этот код можно доработать, расширив список разрешенных доменов, добавив логирование попыток недопустимых редиректов и интеграцию с админ-панелью.

Итоги и рекомендации по работе с редиректами в WordPress

Чтобы снизить риск открытых редиректов на вашем сайте WordPress, придерживайтесь следующих правил:

  • Используйте wp_safe_redirect() вместо wp_redirect() там, где возможно;
  • Всегда проверяйте и фильтруйте входящие URL перед редиректом;
  • Ограничивайте редиректы только доверенными доменами и адресами;
  • Регулярно проверяйте сайт с помощью сканеров безопасности;
  • Обновляйте плагины и темы, чтобы исключить уязвимости;
  • Используйте проверенные плагины безопасности для дополнительной защиты.

Внедрение этих мер поможет надежно защитить ваш сайт на WordPress от злоумышленников и сохранить доверие пользователей.

WooCommerce: как автоматически удалять товар из корзины после отмены оплаты
13.06.2026
WooCommerce: установка ограничений на количество товаров в корзине
10.05.2026
WooCommerce: установка ограничений на скидки по ролям пользователей
21.04.2026
Автозаполнение форм в WordPress: улучшение пользовательского опыта
15.11.2025
Как установить ограничение на число запросов к REST API WordPress
12.04.2026