Рейтинг:0

Насколько надежен «хост» во входящем HTTPS-запросе?

флаг us

Я пытаюсь понять, какой уровень уверенности я могу иметь, когда мой API, который живет в api.foo.com получает POST-запрос со страницы, которая foo.com указано как его хозяин значение в заголовке.

Конкретно - это то, что можно подделать (может быть, даже как-то легко подделать?) или кому-то сложно (невозможно?) что-то отправить api.foo.com из какого-то совершенно другого места и подделать в заголовке, что хост foo.com?

Если это не сложно или невозможно, то каков стандартный отраслевой механизм проверки того, что запрос исходит из надежного места?

Рейтинг:2
флаг us

Хозяин заголовок является частью HTTP-запроса, который указывает, к какому виртуальному хосту на веб-сервере направляется запрос.

Это не имеет ничего общего с источником запроса. Любой может сделать запрос HTTP/HTTPS к вашему веб-серверу и указать google.com в Хозяин заголовок. Затем ваш веб-сервер должен решить, что он хочет делать с запросом.

Браузеры обычно добавляют HTTP Реферер заголовок для запросов, который указывает, какая исходная страница предоставила URL-адрес для этого запроса. Однако, Реферер Поле также является ненадежным пользовательским вводом, и его можно легко подделать.

Пример:

Пользователь посещает http://www.example.com/пример веб-сайт, на котором есть гиперссылка на http://www.example.org. Пользователь нажимает на ссылку. Браузер пользователя отправляет запрос на IP-адрес www.example.org, со следующими заголовками HTTP:

Хост: www.example.org
Реферер: http://www.example.com/example

В последнее время браузеры начали лишить Реферер содержимое заголовка, чтобы он содержал только корневой URL: http://www.example.com, при выполнении междоменных запросов.

В целом, вы не можете доверять какому-либо заголовку HTTP-запроса, чтобы он содержал именно те данные, которые вы ожидаете, поскольку это ненадежный пользовательский ввод.

Рейтинг:1
флаг cz

Хост: заголовок запроса (RFC 7230 § 5.4) является ненадежный пользовательский ввод. Он предоставляется пользовательским агентом для указания (виртуального) хоста, к которому относится HTTP-запрос. Любой вредоносный пользовательский агент может подключиться к вашему серверу и сделать запрос с недопустимым заголовком Host:.

Вы должны проверить, что содержимое заголовка Host: соответствует вашему фактическому имени хоста перед обработкой запроса. Обычно веб-сервер (nginx, Apache и т. д.) позаботится об этом за вас, а затем передает запрос вашему приложению.Но если вы предоставляете приложение непосредственно в Интернет, а не за обычным веб-сервером, вы должны проверить его самостоятельно.

Yevgeny Simkin avatar
флаг us
подождите - так что - веб-сервер * может проверить, что вызов действительно исходит от foo.com, а не от чего-то, что застряло foo.com в заголовке? Вы знаете, где я могу прочитать о том, как это работает и насколько это надежно? Или я вас неправильно понимаю?
Michael Hampton avatar
флаг cz
Это одна из самых основных функций веб-сервера. Вы устанавливали один раньше? См., например, https://nginx.org/en/docs/http/request_processing.html.
user10489 avatar
флаг nc
«может подтвердить, что вызов действительно исходит от foo.com, а не от чего-то, что застряло foo.com в заголовке». Другими словами, удаленный запрос запрашивает foo.com, который должен быть одним из псевдонимов вашего хоста (но может и не быть).

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.