Функция wp_sanitize_redirect()
используется для очистки URL перед перенаправлением, чтобы предотвратить использование опасных или недопустимых символов в запросах. Она удаляет пробелы и другие вредоносные символы, чтобы URL можно было безопасно использовать для редиректа в заголовках HTTP.
wp_sanitize_redirect( string $location ): string
Параметры:
$location
(string, обязательный): Путь для редиректа, который необходимо очистить.
Возвращаемое значение:
- Возвращает строку — безопасный для редиректа URL, из которого удалены недопустимые символы.
Особенности:
- Функция pluggable, что значит, её можно переопределить через плагин. Она становится доступной только после загрузки всех плагинов, поэтому её следует использовать через хуки, например,
plugins_loaded
илиinit
. - Работает на основе функции
wp_kses_no_null()
, которая удаляет символы NULL и другие опасные символы из строки. - Используется как основа для функции
wp_safe_redirect()
.
Пример 1: Очистка вредоносного URL
$url = 'http://example.org/redirect.php?page=%0d%0aContent-Type: text/plain%0d%0aHTTP/1.1 200 OK%0d%0aContent-Type: text/plain%0d%0aContent-Length:%208%0d%0a%0d%0a%3Chtml%3EHACKED%3C/html%3E.';
$clean_url = wp_sanitize_redirect( $url );
echo $clean_url;
// Результат: http://example.org/redirect.php?page=Content-Type:text/plainHTTP/1.1200OKContent-Type:text/plainContent-Length:%208%3Chtml%3EHACKED%3C/html%3E.
Пример 2: Удаление пробелов в URL
$url = '/products/sale and new/';
$clean_url = wp_sanitize_redirect( $url );
echo $clean_url;
// Результат: /products/saleandnew/
Обработка атак с редиректами:
Одним из основных методов атак с редиректами является вставка в URL вредоносных символов, таких как CR (возврат каретки %0d
или \r
) и LF (переход на новую строку %0a
или \n
). Эти символы могут быть использованы для манипуляции заголовками HTTP, например, заголовком «Location».
Пример атакующего URL:
http://malicious.site/redirect.php?page=%0d%0aContent-Type: text/html%0d%0aHTTP/1.1 200 OK%0d%0aContent-Length:%207%0d%0a%0d%0a%3Chtml%3EHACKED%3C/html%3E.
Если такой URL обработать напрямую без очистки, сервер может воспринять его как два отдельных запроса и отправить вредоносный ответ пользователю. Это может привести к таким атакам, как внедрение произвольного контента или межсайтовый скриптинг (XSS).
Рекомендации по безопасности:
- Проверяйте все данные, вводимые пользователями, на наличие символов CR/LF перед использованием в HTTP-заголовках.
- Используйте функцию
wp_sanitize_redirect()
для очистки URL перед редиректами. - Для дополнительной проверки ссылок используйте функцию
wp_validate_redirect()
.
Заключение:
Использование функции wp_sanitize_redirect()
является важной частью обеспечения безопасности при обработке редиректов в WordPress. Она помогает защитить сайт от атак, связанных с манипуляцией URL, и улучшает общую безопасность веб-приложений.