Я пытаюсь понять CORS. По моему мнению, это позволяет вам ограничить, какие домены могут получить доступ к ресурсу на вашем сервере. Однако это не похоже на всю историю. Например, у меня есть веб-сервис без CORS. Я не могу ударить этот веб-сервис из своего веб-приложения через jQuery (приложение работает на localhost). Тем не менее, я могу попасть в веб-службу из Postman. Итак, я немного смущен. Есть ли какая-то дополнительная клиентская работа, которая включает CORS?
CORS. Это клиентская вещь, серверная вещь или вещь транспортного уровня?
Ответ 1
Сервер отвечает за сообщение о разрешенных источниках. Веб-браузер отвечает за то, чтобы запросы отправлялись только с разрешенных доменов.
CORS применяется к запросам, когда в запрос включен исходный заголовок. Это включает запросы, сделанные из запросов JavaScript и POST. Не применяются все ресурсы. Источником является протокол, хост и порт, который делает запрос. Запросы, сделанные JavaScript, используют источник, который загрузил JavaScript, а не источник, из которого он был загружен.
Если CORS не включен, браузер будет полагаться на ту же политику происхождения. Та же политика происхождения применяется только к сценариям. Браузер будет разрешать загрузку только сценариев из того же источника, что и загруженная страница. Та же политика происхождения принимается, когда не разрешено явное происхождение.
Клиент HTTP, отличный от браузера, не будет использовать ту же политику происхождения или CORS. Запросы, сделанные от этих других клиентов HTTP, не имеют источника. Если приложение Postman для настольных компьютеров не эмулирует браузер, оно сможет отправлять запросы на любой URL.
CORS и та же самая политика происхождения необходимы, потому что браузер не доверяет веб-сайтам, которые он посещает, для отправки запросов другим веб-сайтам. Они не защищают сайт происхождения, они защищают сайт, получающий запросы перекрестного происхождения. Вот почему разрешенные источники соответствуют целевому серверу.
Без этих политик простой сценарий, который многократно загружает веб-сайт, может распространяться рекламными сетями или внедрением сценария, и тогда любой браузер, загружающий сценарий, будет способствовать атаке отказа в обслуживании на веб-сайт. Благодаря CORS и той же политике происхождения браузер ограничит влияние этого сценария.
Еще одна важная защита, которую обеспечивает CORS, - это защита от подделки межсайтовых запросов. Он не позволяет сайту делать некоторые типы запросов на другой сайт. Эти запросы будут выполняться с использованием любых ранее созданных токенов, таких как токены сеанса.
CORS на примере:
Веб-браузер загружает страницу из www.example.com
. Страница содержит скрипт, который делает запрос к www.example.org
. Источник запроса - www.example.com
. Браузер либо делает запрос, либо сначала отправляет запрос OPTIONS
(запрос перед полетом). Когда сервер в www.example.org
получает запрос от источника, отличного от www.example.org
, он отвечает заголовком ответа Access-Control-Allow-Origin
, который сообщает браузеру источникам, которым разрешено делать запросы. Он также может отвечать другими заголовками, такими как Access-Control-Allow-Methods
и Access-Control-Allow-Headers
, которые могут ограничивать типы разрешенных запросов. Когда браузеру сообщают, какие источники разрешены, он блокирует будущие запросы от запрещенных источников.
Ответ 2
Это немного и то, и другое. Ваш браузер предотвратит запросы CORS, если источник запроса (т.е. Домен URL-адреса реферала) не находится в белом списке адресата, или пункт назначения одобряет все запросы независимо от происхождения.
В обоих случаях добавляется требуемый заголовок (Access-Control-Allow-Origin), который сообщает браузеру, что он одобрен для отправки запроса в пункт назначения.
Это гарантирует, что люди со злым умыслом не могут отправлять запросы в другой домен, не зная об этом.