Функция wp_validate_redirect()
в WordPress проверяет, допустимо ли использование указанного URL для редиректа. Это полезно для предотвращения перенаправлений на небезопасные или несанкционированные домены, что может повысить безопасность вашего сайта.
wp_validate_redirect( string $location, string $fallback_url = '' ): string
Функция проверяет URL и возвращает его, если он соответствует требованиям безопасности. Если URL не прошел проверку, возвращается значение параметра $fallback_url
. По умолчанию разрешаются редиректы только на текущий сайт, но список разрешенных хостов можно расширить с помощью фильтра allowed_redirect_hosts
.
Функция делает следующее:
- Добавляет протокол
http:
к URL, если протокол отсутствует. - Проверяет, чтобы протокол был
http
илиhttps
. - Проверяет домен в URL, разрешая редиректы только на сайты из белого списка (по умолчанию — текущий сайт).
- Если URL не проходит проверку, возвращается
$fallback_url
.
Параметры
- $location (string) — URL, который необходимо проверить.
- $fallback_url (string) — URL, который будет возвращен, если
$location
не пройдет проверку. По умолчанию:''
.
Возвращаемое значение
- string — Проверенный URL или значение
$fallback_url
, если$location
не прошел проверку.
Пример 1: Основная демонстрация работы
В этом примере проверяются различные URL на возможность редиректа:
echo wp_validate_redirect('http://example.com'); //> '' (URL не разрешен)
echo wp_validate_redirect('http://example.com', 'http://mysite.com'); //> http://mysite.com
echo wp_validate_redirect('//mysite.com/path'); //> http://mysite.com/path
echo wp_validate_redirect('https://mysite.com/path'); //> https://mysite.com/path
В этом случае, если домен example.com
не находится в списке разрешенных, функция вернет либо пустую строку, либо URL из $fallback_url
, если он указан.
Пример 2: Добавление собственного домена в белый список
Если необходимо разрешить редиректы на сторонний домен, можно воспользоваться фильтром allowed_redirect_hosts
. Например:
add_filter('allowed_redirect_hosts', function($hosts) {
$hosts[] = 'trusted.com';
return $hosts;
});
echo wp_validate_redirect('https://trusted.com/path');
// https://trusted.com/path
Здесь мы добавляем trusted.com
в белый список, что позволяет функции возвращать этот URL.
Пример 3: Использование в безопасных редиректах
Функция полезна при работе с wp_safe_redirect()
, так как wp_safe_redirect()
перенаправляет пользователя только после проверки URL:
$redirect_url = wp_validate_redirect($_GET['redirect_to'], home_url());
if ($redirect_url) {
wp_safe_redirect($redirect_url);
exit;
}
В этом случае, если $_GET['redirect_to']
не проходит проверку, пользователю будет предложен редирект на домашнюю страницу сайта.
Заключение
Функция wp_validate_redirect()
обеспечивает безопасное использование редиректов, предотвращая случайные или преднамеренные перенаправления на небезопасные домены. Используя эту функцию, вы можете добавлять определенные URL в белый список для разрешенных редиректов, делая ваш сайт более безопасным и защищенным.