Как в node.js нативно преобразовать localhost в IP-адрес?

Нативные модули http и https не требуют указания хоста для запуска простого сервера. Полагаю, что в целях безопасности необходимо решить, какой именно хост будет обслуживаться, а затем уже отклонять запросы с заголовками HOST, не удовлетворяющему настройкам.

Допустим, мы обслуживаем 127.0.0.1:1337. Однако запросы с заголовками localhost:1337 будут невалидными, если мы будем проверять заголовок на соответствие подстроке 127.0.0.1. Да, мы-то знаем, что в данном случае localhost - это местоимение для 127.0.0.1, но ведь так бывает не всегда. Поэтому чтобы пометить localhost как валидный, нужно на программном уровне преобразовать localhost в 127.0.0.1:1337. Но как это сделать нативно?

Прошу в данном вопросе не рекомендовать никаких библиотек и фреймворков, так здесь речь идёт именно о самостоятельной реализации этого функционала нативными средствами.


Ответы (1 шт):

Автор решения: Qwertiy

Не понял вопроса, но очень подозреваю, что ты хочешь сделать это:

const http = require("http")

http.createServer((request, response) => {
  response.end("hi")
}).listen(1337, "0.0.0.0")

Или может быть, раз запрос дошёл до сервера, то его можно не валидировать? Безопасно ли это?

Любой сайт может в dns прописать ссылку на любой ip и это будет валидно. Т. е. любая третья сторона может сделать так, что домен, которым она владеет, будет совершенно законно мапиться на твой ip-адрес.

Я совершенно не вижу смысла пытаться выяснить, ресолвится ли присланный хост в твой ip или нет. В случае браузера подмена хоста из песочницы страницы невозможна. В случае вмешательства через расширения (установка прокси) или в систему (файл hosts) или самостоятельной отправки запроса через wget, curl или другие утилиты можно послать что угодно, но я не вижу повода для проверки таких штук в автоматическом режиме.

Что касается безопасности, dns remapping может являться уязвимостью. Посторонний сайт может указать твой ip в качестве своего и быстро меняя ip между своим сайтом и твоим сможет обходить кроссдоменность при отправке запрсов.

Но возвращаясь к твоему вопросу, в этом варианте их домен совершенно законно мапится на твой ip, и если ты попытаешься проверить, соответствует ли домен ip-адресу, то со значительной вероятностью результат проверки будет положительным.

Чтобы избежать dns remapping'а, надо чтобы сайт знал свой хост (или список допустимых хостов) и работал только с ними. Автоматическое определение тут не поможет.

→ Ссылка