CORS с почтальоном

89

Пару раз задавали эту тему, но я до сих пор чего-то не понимаю:

Когда я читаю ответы о

Нет заголовка Access-Control-Allow-Origin

проблема, это говорит параметр должен быть установлен на запрашиваемом сервере, чтобы позволить Междоменные add_header 'Access-Control-Allow-Origin' '*';.

Но, пожалуйста, скажите мне, почему, когда я спрашиваю почтальона (который является клиентом), он работает как шарм, и у меня есть ответ от запрошенного сервера?

Спасибо

IsraGab
источник
24
Почтальону наплевать на СОП, это инструмент разработчика, а не браузер.
Муса,
2
@Musa Хорошо, если это проблема браузера (клиента), почему мне нужно что-то изменять на сервере?
IsraGab,
7
Это сервер, который сообщает браузеру, что это нормально ( CORS ) для данного сайта или нет для доступа к его контенту, и браузер уважает это
Муса,
У меня точно такой же вопрос. Как это можно сделать программно, в данном случае на электроне.
mluis 07
8
Настоящий вопрос здесь в том, как настроить POSTMAN для имитации поведения браузера, когда сначала отправляется запрос ORIGIN. По сути, как заставить POSTMAN вести себя как браузер, потому что нам нужно протестировать, чтобы убедиться, что наши API настроены правильно. Так что, если API работает из POSTMAN и ломается из-за CORS в браузере. Значит, API бесполезен.
Крис Лав,

Ответы:

50

Как комментирует @Musa, похоже, причина в следующем:

Почтальону наплевать на СОП, это инструмент разработчика, а не браузер

Кстати, вот расширение Chrome , чтобы оно работало в вашем браузере (это для Chrome, но вы можете найти его для FF или Safari).

Отметьте здесь, если хотите узнать больше о Cross-Origin и почему он работает для расширений.

IsraGab
источник
5
Тогда как мне защитить свои маршруты API от таких инструментов, как Postman? Например, API, требующий проверки по капче. Но при прямом доступе из Почтальона проверка капчи обходится
Садман Мухиб Самио
5
Ссылка на расширение не работает.
jayarjo
Тот же вопрос, помимо этого, как расширение может нарушить политику единого происхождения?
Иван Кортес Ромеро
ссылка на chrome-extension не работает
OhadR
44

Если вы используете веб-сайт и заполняете форму для отправки информации (например, номер социального страхования), вы хотите быть уверены, что информация отправляется на сайт, на который, по вашему мнению, она отправляется. Таким образом, браузеры были созданы, чтобы по умолчанию говорить: «Не отправлять информацию в домен, отличный от посещаемого).

В конце концов, это стало слишком ограничивающим, но идея по умолчанию все еще остается в браузерах. Не позволяйте веб-странице отправлять информацию в другой домен. Но это все проверка браузера. Chrome, firefox и т. Д. Имеют встроенный код, который говорит: «перед отправкой этого запроса мы собираемся проверить, соответствует ли пункт назначения посещаемой странице».

Почтальон (или CURL в строке cmd) не имеет встроенных проверок. Вы вручную взаимодействуете с сайтом, поэтому у вас есть полный контроль над тем, что вы отправляете.

user3724317
источник
2
Точнее, почтальон отправляет не запрос XmlHttp, который должен быть проверен, а сетевой вызов верхнего уровня (например, открытие URL-адреса на новой вкладке браузера), поэтому он не
запускается
Браузер не проверяет, не отправляет ли ваш сайт данные в другой домен: если сайт другого домена разрешает все источники, ваш браузер на 100% согласен с этим. Напротив, он защищает другой домен на случай, если ваш сайт будет использовать свои ресурсы без авторизации.
XouDo
35

CORS(Совместное использование ресурсов между источниками) и SOP(Политика одного источника) - это конфигурации на стороне сервера, которые клиенты решают применять или нет .

Относится к клиентам

  • Большинство браузеров применяют его для предотвращения проблем, связанных с CSRFатакой.
  • Большинство инструментов разработки не заботятся об этом.
Фелипе Роос
источник
10

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

Браузер: отправляет OPTIONSвызов для проверки типа сервера и получения заголовков перед отправкой любого нового запроса в конечную точку API. Где это проверяет Access-Control-Allow-Origin. Принимая это во вниманиеAccess-Control-Allow-Origin заголовок просто указывает, какие все CROSS ORIGINS разрешены, хотя по умолчанию браузер разрешает только одно и то же происхождение.

Почтальон: отправка прямой GET, POST, PUT, и DELETEт.д. запрос без проверки , какой тип сервера является и получать заголовок Access-Control-Allow-Originс помощью OPTIONSвызова к серверу.

Ришаб Батра
источник
«Отправляет вызов OPTIONS для проверки типа сервера и получения заголовков перед отправкой любого нового запроса в конечную точку API» - это неверно. Это делается только для непростых запросов.
Квентин
1

Обычно Postman используется для отладки и используется на этапе разработки. Но если вы хотите заблокировать его даже от почтальона, попробуйте это.

    const referrer_domain = "[enter-the-domain-name-of-the-referrer]"
    //check for the referrer domain
    app.all('/*', function(req, res, next) {
      if(req.headers.referer.indexOf(referrer_domain) == -1){
        res.send('Invalid Request')
      }

      next();
    });
Бхарат Пабба
источник
добавьте код в свой файл с роутером. Если у вас есть файл с «роутерами», добавьте код вверху файла. Тот же файл, в котором есть: const express = require ('express') const app = express (); const cors = require ('cors');
samceena
отредактируйте его, app.jsесли вы используете node app.jsдля запуска сервера.
Бхарат Пабба,
это может защитить ваш сервер от ддос?
SuperUberDuper,
-1

Используйте плагин для браузера / Chrome postman, чтобы проверить CORS / SOP как на веб-сайте. Вместо этого используйте настольное приложение, чтобы избежать этих элементов управления.

Гильермо Эллисон
источник