Функция WP_SANITIZE_REDIRECT() в WordPress: описание и примеры использования

Функция WP_SANITIZE_REDIRECT() в WordPress

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

Важная информация о функции

  • Переопределяемая функция: Эта функция располагается в файле wp-includes/pluggable.php. Вы можете заменить ее в своем плагине. Однако учтите, что функция будет доступна только после загрузки всех плагинов, поэтому ее нельзя вызывать напрямую до этого момента. Нужно использовать хук plugins_loaded или позже, например, хук init.

  • Замена функции: Вы можете создать функцию с таким же названием в своем обязательном или обычном плагине, чтобы заменить оригинальную.

  • Используется функцией: wp_kses_no_null()

  • Используется для: wp_safe_redirect()

Шаблон использования

wp_sanitize_redirect( $location );
  • $location (string) — это путь, на который нужно сделать перенаправление (обязательный параметр).

Примеры использования

Пример 1: Очистка вредоносного URL

$url = 'http://test.example.com/redirect.php?page=%0d%0aContent-Type: text/html%0d%0aHTTP/1.1 200 OK%0d%0aContent-Type: text/html%0d%0aContent-Length:%206%0d%0a%0d%0a%3Chtml%3EHACKED%3C/html%3E.';
echo wp_sanitize_redirect( $url );

Результат:

http://test.example.com/~arpit/redirect.php?page=Content-Type:text/htmlHTTP/1.1200OKContent-Type:text/htmlContent-Length:%206%3Chtml%3EHACKED%3C/html%3E.

Пример 2: Удаление пробелов

$url = '/inventory/certified new used/';
echo wp_sanitize_redirect( $url ); // /inventory/certifiednewused/

Описание функции

Функция wp_sanitize_redirect выполняет следующие действия:

  1. Кодирует пробелы в URL:

    $location = str_replace( ' ', '%20', $location );
  2. Использует регулярное выражение для очистки некорректных символов:

    $regex = '/.../x'; // Регулярное выражение
    $location = preg_replace_callback( $regex, '_wp_sanitize_utf8_in_redirect', $location );
  3. Удаляет все символы, не входящие в разрешенный набор:

    $location = preg_replace( '|[^a-z0-9-~+_.?#=&;,/:%!*[]()@]|i', '', $location );
  4. Вызов функции wp_kses_no_null, которая дополнительно очищает URL от недопустимых значений:

    $location = wp_kses_no_null( $location );
  5. Удаляет перенаправления.

    $strip = array( '%0d', '%0a', '%0D', '%0A' );
    return _deep_replace( $strip, $location );

Заключение

Функция WP_SANITIZE_REDIRECT() играет важную роль в безопасности Web-приложений на WordPress, обеспечивая правильное и безопасное перенаправление пользователей. Используя её, вы защищаете свой сайт от различных видов атак через некорректные URL.

Leave a Reply

Ваш адрес email не будет опубликован. Обязательные поля помечены *