Функция wp_http_validate_url()
проверяет переданный URL и определяет, можно ли его использовать в HTTP запросах, таких как те, что используются в HTTP API WordPress. Она помогает избежать использования небезопасных или некорректных URL, которые могут привести к уязвимостям или ошибкам.
Некорректные URL могут содержать неверные протоколы (например, ftp://
), логин и пароль, или ссылки на внутренние IP-адреса (например, http://192.168.0.1
). Функция также проверяет, правильно ли указан домен и нет ли ошибок в синтаксисе URL.
wp_http_validate_url( string $url ): string|false
Параметры
- $url
(string)
— URL, который нужно проверить.- Обязательный параметр.
Возвращаемое значение
- Возвращает строку с очищенным URL, если проверка пройдена.
- Возвращает
false
, если URL не соответствует требованиям и считается небезопасным.
Примеры небезопасных URL
ftp://example.com/caniload.php
— Неверный протокол (разрешены толькоhttp
иhttps
).http:///example.com/caniload.php
— Неправильный URL (ошибка в синтаксисе).http://user:[email protected]/caniload.php
— URL с логином и паролем.http://exampleeeee.com/caniload.php
— Неверное доменное имя.
Примеры небезопасных URL по умолчанию
http://192.168.0.1/caniload.php
— Внутренние IP-адреса (локальные сети).http://198.143.164.252:81/caniload.php
— Порты, отличные от 80, 443 и 8080 (можно изменить через фильтрhttp_allowed_safe_ports
).
Пример 1: Проверка различных URL
// Внутренний URL
echo wp_http_validate_url('genius.courses'); // false (отсутствует http/https)
echo wp_http_validate_url('https://genius.courses'); // https://genius.courses
// Внешний URL
echo wp_http_validate_url('site.com'); // false
echo wp_http_validate_url('http://example.com'); // http://example.com
// URL с логином и паролем
echo wp_http_validate_url('http://username:[email protected]/'); // false
// URL с портом
echo wp_http_validate_url('http://example.com:80/'); // http://example.com:80/
echo wp_http_validate_url('http://example.com:123/'); // false (недопустимый порт)
Пример 2: Безопасная проверка пользовательского ввода
При проверке URL, переданного пользователем, рекомендуется использовать esc_url_raw()
для дополнительной защиты. Например:
$url = esc_url_raw( $_POST['url'] );
// Проверяем, корректен ли URL
if ( wp_http_validate_url( $url ) === $url ) {
// URL безопасен и может быть использован
echo 'URL прошел проверку: ' . $url;
} else {
// URL небезопасен
echo 'Неверный или небезопасный URL.';
}
Хуки
Функция предоставляет два фильтра, которые можно использовать для изменения проверки:
http_request_host_is_external
— Позволяет разрешить использование внешних доменов или IP-адресов.http_allowed_safe_ports
— Позволяет настроить список разрешенных портов (по умолчанию: 80, 443, 8080).
Пример фильтрации портов
Если необходимо добавить разрешенный порт, например, 1234, можно использовать фильтр:
add_filter( 'http_allowed_safe_ports', function( $ports ) {
$ports[] = 1234;
return $ports;
});
Особенности
- Функция работает на основе
wp_kses_bad_protocol()
, которая проверяет протоколы URL. - Поддерживает только HTTP и HTTPS протоколы по умолчанию. Все другие протоколы будут считаться небезопасными.
- URL должен быть корректно составлен, включая правильный домен, без использования логина и пароля.
Заключение
Функция wp_http_validate_url()
— это полезный инструмент для проверки и очистки URL перед их использованием в HTTP запросах в WordPress. Она помогает предотвратить использование небезопасных или некорректных URL, тем самым защищая ваш сайт от потенциальных угроз.