Функция 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
выполняет следующие действия:
-
Кодирует пробелы в URL:
$location = str_replace( ' ', '%20', $location );
-
Использует регулярное выражение для очистки некорректных символов:
$regex = '/.../x'; // Регулярное выражение $location = preg_replace_callback( $regex, '_wp_sanitize_utf8_in_redirect', $location );
-
Удаляет все символы, не входящие в разрешенный набор:
$location = preg_replace( '|[^a-z0-9-~+_.?#=&;,/:%!*[]()@]|i', '', $location );
-
Вызов функции
wp_kses_no_null
, которая дополнительно очищает URL от недопустимых значений:$location = wp_kses_no_null( $location );
-
Удаляет перенаправления.
$strip = array( '%0d', '%0a', '%0D', '%0A' ); return _deep_replace( $strip, $location );
Заключение
Функция WP_SANITIZE_REDIRECT()
играет важную роль в безопасности Web-приложений на WordPress, обеспечивая правильное и безопасное перенаправление пользователей. Используя её, вы защищаете свой сайт от различных видов атак через некорректные URL.