# wp_http_validate_url()

URL: https://chugunov.pro/api-wordpress/functions/wp_http_validate_url/
Проверено на WordPress 6.9, обновлено 06.08.2026.
Источник: независимый русскоязычный справочник chugunov.pro. Не является официальной документацией WordPress.

Тип: функция.
Появился в версии: 3.5.2.

## Сигнатура

```php
wp_http_validate_url( string $url ): string|false
```

## Описание

Поддерживаются только протоколы http и https.
Примеры URL, которые считаются небезопасными:

ftp://example.com/caniload.php – Недопустимый протокол – разрешены только http и https.

http:///example.com/caniload.php – Некорректный URL.

http://user:pass@example.com/caniload.php – Данные для входа.

http://example.invalid/caniload.php – Недопустимое имя хоста, так как IP-адрес нельзя определить через DNS.

Примеры URL, которые по умолчанию считаются небезопасными, но могут быть разрешены с помощью фильтров:

http://192.168.0.1/caniload.php – IP-адрес из локальной сети (LAN).
Это можно изменить с помощью фильтра ‘http_request_host_is_external’.

http://198.143.164.252:81/caniload.php – По умолчанию разрешены только порты 80, 443 и 8080.
Это можно изменить с помощью фильтра ‘http_allowed_safe_ports’.

## Параметры

- `$url` `string` — обязательный. URL запроса.

## Возвращаемое значение

`string|false`

## Исходный код

Файл: `wp-includes/http.php:559`

```php
function wp_http_validate_url( $url ) {
	if ( ! is_string( $url ) || '' === $url || is_numeric( $url ) ) {
		return false;
	}

	$original_url = $url;
	$url          = wp_kses_bad_protocol( $url, array( 'http', 'https' ) );
	if ( ! $url || strtolower( $url ) !== strtolower( $original_url ) ) {
		return false;
	}

	$parsed_url = parse_url( $url );
	if ( ! $parsed_url || empty( $parsed_url['host'] ) ) {
		return false;
	}

	if ( isset( $parsed_url['user'] ) || isset( $parsed_url['pass'] ) ) {
		return false;
	}

	if ( false !== strpbrk( $parsed_url['host'], ':#?[]' ) ) {
		return false;
	}

	$parsed_home = parse_url( get_option( 'home' ) );
	$same_host   = isset( $parsed_home['host'] ) && strtolower( $parsed_home['host'] ) === strtolower( $parsed_url['host'] );
	$host        = trim( $parsed_url['host'], '.' );

	if ( ! $same_host ) {
		if ( preg_match( '#^(([1-9]?\d|1\d\d|25[0-5]|2[0-4]\d)\.){3}([1-9]?\d|1\d\d|25[0-5]|2[0-4]\d)$#', $host ) ) {
			$ip = $host;
		} else {
			$ip = gethostbyname( $host );
			if ( $ip === $host ) { // Error condition for gethostbyname().
				return false;
			}
		}
		if ( $ip ) {
			$parts = array_map( 'intval', explode( '.', $ip ) );
			if ( 127 === $parts[0] || 10 === $parts[0] || 0 === $parts[0]
				|| ( 172 === $parts[0] && 16 <= $parts[1] && 31 >= $parts[1] )
				|| ( 192 === $parts[0] && 168 === $parts[1] )
			) {
				// If host appears local, reject unless specifically allowed.
				/**
				 * Checks if HTTP request is external or not.
				 *
				 * Allows to change and allow external requests for the HTTP request.
				 *
				 * @since 3.6.0
				 *
				 * @param bool   $external Whether HTTP request is external or not.
				 * @param string $host     Host name of the requested URL.
				 * @param string $url      Requested URL.
				 */
				if ( ! apply_filters( 'http_request_host_is_external', false, $host, $url ) ) {
					return false;
				}
			}
		}
	}

	if ( empty( $parsed_url['port'] ) ) {
		return $url;
	}

	$port = $parsed_url['port'];

	/**
	 * Controls the list of ports considered safe in HTTP API.
	 *
	 * Allows to change and allow external requests for the HTTP request.
	 *
	 * @since 5.9.0
	 *
	 * @param int[]  $allowed_ports Array of integers for valid ports. Default allowed ports
	 *                              are 80, 443, and 8080.
	 * @param string $host          Host name of the requested URL.
	 * @param string $url           Requested URL.
	 */
	$allowed_ports = apply_filters( 'http_allowed_safe_ports', array( 80, 443, 8080 ), $host, $url );
	if ( is_array( $allowed_ports ) && in_array( $port, $allowed_ports, true ) ) {
		return $url;
	}

	if ( $parsed_home && $same_host && isset( $parsed_home['port'] ) && $parsed_home['port'] === $port ) {
		return $url;
	}

	return false;
}
```

## История изменений

- 3.5.2 — Introduced.

## Связанные

Использует: [`wp_kses_bad_protocol`](https://chugunov.pro/api-wordpress/functions/wp_kses_bad_protocol/), [`apply_filters`](https://chugunov.pro/api-wordpress/functions/apply_filters/), [`get_option`](https://chugunov.pro/api-wordpress/functions/get_option/).
Используется в: [`wp_enqueue_command_palette_assets`](https://chugunov.pro/api-wordpress/functions/wp_enqueue_command_palette_assets/), `WP_Font_Collection::load_from_json`, `WP_REST_Font_Faces_Controller::sanitize_src`, `WP_REST_Font_Faces_Controller::validate_create_font_face_settings`, `WP_Http::validate_redirects`, `WP_Http::request`, [`pingback_ping_source_uri`](https://chugunov.pro/api-wordpress/functions/pingback_ping_source_uri/).

Оригинал в официальной документации: https://developer.wordpress.org/reference/functions/wp_http_validate_url/
