CORS avec POSTMAN

89

Ce sujet a été posé plusieurs fois, mais je ne comprends toujours pas quelque chose:

Quand je lis des réponses sur

Pas d'en-tête 'Access-Control-Allow-Origin'

question, il dit un cadre doit être défini sur le serveur demandé afin de permettre plusieurs domaines: add_header 'Access-Control-Allow-Origin' '*';.

Mais, s'il vous plaît dites-moi pourquoi lorsque vous demandez au facteur (qui est un client), cela fonctionne comme un charme et j'ai une réponse du serveur demandé?

Merci

IsraGab
la source
24
Postman ne se soucie pas de SOP, c'est un outil de développement pas un navigateur.
Musa
2
@Musa Ok, donc s'il s'agit d'un problème de navigateur (client), pourquoi devrais-je modifier quelque chose sur le serveur?
IsraGab
7
C'est le serveur qui dit au navigateur que c'est correct ( CORS ) ou non pour un site donné d'accéder à son contenu et le navigateur l'honore
Musa
J'ai exactement la même question. Comment peut-on faire cela par programme, dans ce cas sur électron.
mluis
8
La vraie question ici est de savoir comment configurer POSTMAN pour imiter le comportement du navigateur là où une requête ORIGIN est envoyée en premier. En gros, comment faire pour que POSTMAN se comporte comme un navigateur, car nous devons tester pour nous assurer que nos API sont correctement configurées. Alors que se passe-t-il si l'API fonctionne à partir de POSTMAN et qu'elle se brise à cause du CORS du navigateur. Cela signifie que l'API est inutile.
Chris Love

Réponses:

50

Comme le commente @Musa, il semble que la raison en soit:

Postman ne se soucie pas de SOP, c'est un outil de développement pas un navigateur

Au fait, voici une extension chrome afin de la faire fonctionner sur votre navigateur (celle-ci est pour chrome, mais vous pouvez la trouver pour FF ou Safari).

Cochez ici si vous souhaitez en savoir plus sur Cross-Origin et pourquoi cela fonctionne pour les extensions.

IsraGab
la source
5
Alors, comment puis-je protéger mes routes API accessibles à partir d'outils tels que Postman? Par exemple, une API qui nécessite une vérification captcha. Mais si elle est directement accessible depuis Postman, la vérification du captcha est contournée
Sadman Muhib Samyo
5
Le lien vers l'extension est rompu.
jayarjo le
La même question, en plus de cela, comment une extension peut-elle faire briser la politique d'origine unique?
Iván Cortés Romero
le lien vers l'extension chrome est rompu
OhadR
44

Si vous utilisez un site Web et que vous remplissez un formulaire pour soumettre des informations (votre numéro de sécurité sociale par exemple), vous voulez être sûr que les informations sont envoyées au site auquel vous pensez qu'elles sont envoyées. Les navigateurs ont donc été conçus pour dire, par défaut, «N'envoyez pas d'informations à un domaine autre que le domaine visité).

Finalement, cela est devenu trop limitatif, mais l'idée par défaut reste toujours dans les navigateurs. Ne laissez pas la page Web envoyer des informations à un domaine différent. Mais ce n'est que la vérification du navigateur. Chrome et Firefox, etc. ont un code intégré qui dit «avant d'envoyer cette demande, nous allons vérifier que la destination correspond à la page visitée».

Postman (ou CURL sur la ligne cmd) n'a pas ces contrôles intégrés. Vous interagissez manuellement avec un site, vous avez donc un contrôle total sur ce que vous envoyez.

utilisateur3724317
la source
2
Plus précisément, le facteur n'envoie pas de requête XmlHttp qui serait vérifiée mais un appel réseau de haut niveau (comme votre ouverture de l'URL sur un nouvel onglet de navigateur) afin qu'il ne soit pas lancé même lorsqu'il est en extension
tgkprog
Le navigateur ne vérifie pas que votre site n'envoie pas de données à un autre domaine: si l'autre site de domaine autorise toutes les origines, votre navigateur est 100% d'accord avec cela. C'est le contraire, c'est protéger l'autre domaine, au cas où votre site utiliserait ses ressources sans y être autorisé.
XouDo
35

CORS(Partage de ressources inter-origines) et SOP(Politique de même origine) sont des configurations côté serveur que les clients décident d'appliquer ou non .

Liés aux clients

  • La plupart des navigateurs l' appliquent pour éviter les problèmes liés aux CSRFattaques.
  • La plupart des outils de développement s'en moquent .
Felipe Roos
la source
10

Bien que toutes les réponses ici soient une très bonne explication de ce qu'est cors, la réponse directe à votre question serait à cause des différences suivantes: facteur et navigateur.

Navigateur: envoie un OPTIONSappel pour vérifier le type de serveur et obtenir les en-têtes avant d'envoyer toute nouvelle requête au point de terminaison de l'API. Où il vérifie Access-Control-Allow-Origin. En prenant cela en compte, l'en- Access-Control-Allow-Origintête spécifie simplement quelles ORIGINES CROISÉES sont autorisées, bien que le navigateur par défaut n'autorise que la même origine.

Postman: Envoie directe GET, POST, PUT, DELETEetc. demande sans vérifier quel type de serveur est et obtenir l' en- tête Access-Control-Allow-Originen utilisant l' OPTIONSappel au serveur.

Rishabh Batra
la source
"Envoie un appel OPTIONS pour vérifier le type de serveur et obtenir les en-têtes avant d'envoyer une nouvelle requête au point de terminaison de l'API" - Ce n'est pas vrai. Il ne le fait que pour les demandes non simples.
Quentin
1

Généralement, Postman utilisé pour le débogage et utilisé dans la phase de développement. Mais au cas où vous voudriez le bloquer, même du facteur, essayez ceci.

    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();
    });
Bharath Pabba
la source
ajoutez le code dans votre fichier avec le routeur. Si vous avez un fichier avec des "routeurs", ajoutez le code en haut du fichier. Le même fichier où vous avez: const express = require ('express') const app = express (); const cors = require ('cors');
samceena
modifiez-le app.jssi vous utilisez node app.jspour exécuter le serveur.
Bharath Pabba
cela peut-il protéger votre serveur des ddos?
SuperUberDuper
-1

Utilisez le plugin browser / chrome postman pour vérifier le CORS / SOP comme un site Web. Utilisez plutôt une application de bureau pour éviter ces contrôles.

Guillermo Ellison
la source