Хост и порт являются ключевыми компонентами URL-строк, и в библиотеке
Validator.js их обработка реализована через набор параметров функции
проверки URL, прежде всего isURL. Эти параметры позволяют
гибко управлять тем, какие адреса считаются допустимыми, а какие должны
быть отклонены на этапе валидации.
В контексте URL хост определяет доменное имя или IP-адрес ресурса, а порт указывает на конкретный сетевой сервис внутри этого хоста. Например:
https://example.com:443
example.com — хост443 — портВ Validator.js эти элементы рассматриваются как часть общей структуры URL и могут быть строго ограничены через конфигурационные параметры.
Функция validator.isURL(str, options) предоставляет
набор опций, которые напрямую влияют на проверку хоста.
Параметр require_host определяет, обязателен ли хост в
URL.
true — URL без хоста будет считаться невалиднымfalse — допускаются относительные или нестандартные
формы URLПример поведения:
validator.isURL('http:///path', { require_host: true }) // false
validator.isURL('http:///path', { require_host: false }) // может быть true в зависимости от других опций
Этот параметр часто используется в системах, где важно строгое соответствие стандартному формату URL.
Позволяет задать список разрешённых хостов.
{
host_whitelist: ['example.com', 'api.example.com']
}
Если URL содержит хост, отсутствующий в списке, валидация не пройдёт.
Особенности:
Пример:
validator.isURL('https://example.com', { host_whitelist: ['example.com'] }) // true
validator.isURL('https://test.com', { host_whitelist: ['example.com'] }) // false
Обратный механизм — список запрещённых хостов.
{
host_blacklist: ['malicious.com']
}
Используется для фильтрации нежелательных или потенциально опасных доменов.
Пример:
validator.isURL('https://malicious.com', { host_blacklist: ['malicious.com'] }) // false
Часто применяется в системах безопасности, где нужно исключить известные вредоносные источники.
Хотя параметр не относится напрямую к хосту, он влияет на его наличие в строке.
{
allow_protocol_relative_urls: true
}
Пример:
'//example.com/path'
Такие URL не содержат протокол, но содержат хост. Валидация зависит
от настройки require_host.
Порт в URL задаётся через двоеточие после хоста:
http://example.com:3000
Validator.js не имеет отдельного параметра require_port,
но управление портом осуществляется косвенно через isURL и
дополнительные проверки.
Для анализа порта обычно комбинируют isURL и
дополнительные методы.
Пример:
const url = 'http://example.com:8080'
Порт можно извлечь и проверить отдельно:
validator.isPort('8080')
Функция isPort проверяет:
В Validator.js нет встроенного whitelist/blacklist для портов, поэтому ограничения реализуются вручную:
const allowedPorts = ['80', '443']
const port = '8080'
const isAllowed = allowedPorts.includes(port)
Такой подход часто используется в API-шлюзах и прокси-сервисах.
URL без порта считается корректным, если:
isURL не требует явного указания портаПример:
https://example.com
В этом случае порт подразумевается как 443, но не указывается явно.
На практике параметры хоста и порта работают совместно с другими настройками:
validator.isURL(url, {
require_host: true,
host_whitelist: ['example.com'],
protocols: ['http', 'https']
})
Такой набор обеспечивает:
{
require_host: true,
require_protocol: true,
protocols: ['https'],
host_whitelist: ['api.example.com']
}
В этом случае допустим только:
https://api.example.com
Любой порт при этом не влияет на валидность, если он корректен синтаксически.
host_whitelist: ['api.service.com']
Используется для защиты от подмены домена в клиентских запросах.
host_blacklist: ['localhost', '127.0.0.1']
Применяется для предотвращения SSRF-уязвимостей.
validator.isPort(port)
allowedPorts.includes(port)
Используется в микросервисной архитектуре, где каждый сервис привязан к фиксированному порту.
Хост может быть представлен IP-адресом:
http://192.168.0.1:3000
http://[2001:db8::1]:443
Validator.js учитывает:
При использовании host_whitelist IP-адреса должны
указываться явно в том же формате, что и в URL.
host_whitelist: ['example.com']
URL:
https://api.example.com
Результат: невалиден, так как поддомен не включён в список.
Validator.js не выделяет порт как отдельную сущность в
isURL, поэтому попытки управлять портом через URL-опции
часто приводят к ошибочному ожиданию поведения.
http://2001:db8::1:443
Правильно:
http://[2001:db8::1]:443
В серверных приложениях на Node.js параметры хоста и порта часто комбинируются с Validator.js на уровне входных DTO:
isURLisPortТакой подход позволяет разделить: