POSTMANを使用したCORS


95

この主題は数回尋ねられました、しかし私はまだ何かを理解していません:

私がについての答えを読んだとき

'Access-Control-Allow-Origin'ヘッダーなし

問題は、クロスドメインを許可するために、要求されたサーバーに設定を設定する必要があることを示していますadd_header 'Access-Control-Allow-Origin' '*';

しかし、なぜ郵便配達員(クライアント)に尋ねると、それは魅力のように機能していて、要求されたサーバーから応答がありますか?

ありがとうございました


25
PostmanはSOPを気にしません、それはブラウザではなく開発ツールです。
ムサ

2
@Musaわかりました。ブラウザ(クライアント)の問題の場合、サーバー上の何かを変更する必要があるのはなぜですか?
israGab 2016年

8
特定のサイトがコンテンツにアクセスしても大丈夫(CORS)であるかどうかをブラウザに通知し、ブラウザがそれを尊重するサーバー
Musa

まったく同じ質問があります。どうすればプログラム的に、この場合は電子に対してそれを行うことができますか。
mluis

9
ここでの本当の問題は、ORIGIN要求が最初に送信されるブラウザの動作を模倣するようにPOSTMANを設定する方法です。基本的に、APIが正しく構成されていることを確認するためにテストする必要があるため、POSTMANをブラウザーのように動作させる方法。では、APIがPOSTMANから機能し、ブラウザーからのCORSが原因で壊れた場合はどうなるでしょうか。これは、APIが役に立たないことを意味します。
クリス・ラブ

回答:


51

@Musaがコメントしているように、その理由は次のようです。

PostmanはSOPを気にしません、それはブラウザではなく開発ツールです

ちなみに、ブラウザで動作させるためのChrome拡張機能があります(これはChrome用ですが、FFまたはSafariのいずれかで見つけることができます)。

Cross-Originと、拡張機能で機能する理由について詳しく知りたい場合は、こちらを確認してください。


6
次に、PostmanなどのツールからアクセスされているAPIルートを保護するにはどうすればよいですか?たとえば、キャプチャ検証を必要とするAPI。ただし、Postmanから直接アクセスした場合、
キャプチャの

5
拡張機能へのリンクが壊れています。
jayarjo

これに加えて、同じ質問は、拡張機能がどのようにして同一生成元ポリシーを破ることができるのでしょうか?
イバン・コルテス・ロメロ

クロム拡張へのリンクが壊れている
OhadR

46

Webサイトを使用していて、フォームに入力して情報(社会保障番号など)を送信する場合は、送信先と思われるサイトに情報が送信されていることを確認する必要があります。そのため、ブラウザは、デフォルトで「アクセスしているドメイン以外のドメインに情報を送信しないでください」と言うように構築されています。

最終的にはそれが制限されすぎましたが、デフォルトのアイデアはまだブラウザに残っています。Webページに別のドメインに情報を送信させないでください。しかし、これはすべてブラウザチェックです。ChromeやFirefoxなどには、「このリクエストを送信する前に、宛先がアクセスしているページと一致することを確認する」というコードが組み込まれています。

Postman(またはcmd行のCURL)には、これらの組み込みチェックがありません。手動でサイトを操作しているため、送信する内容を完全に制御できます。


2
より正確には、postmanはチェックされるXmlHttpリクエストを送信しませんが、トップレベルのネットワーク呼び出し(新しいブラウザタブでURLを開くなど)を送信するため、拡張されている場合でもキックされません
tgkprog 2018

1
ブラウザは、サイトが別のドメインにデータを送信していないことを確認していません。他のドメインサイトがすべての発信元を許可している場合、ブラウザはそれで100%問題ありません。逆に、サイトが許可されずにリソースを使用する場合に備えて、他のドメインを保護します。
XouDo

40

CORS(クロスオリジンリソースシェアリング)とSOP(同一生成元ポリシー)は、クライアントが適用するかどうかを決定するサーバー側の構成です。

クライアントに関連

  • ほとんどのブラウザ CSRF攻撃に関連する問題を防ぐためにそれを強制します。
  • ほとんどの開発ツール はそれを気にしません

13

ここでのすべての答えはcorsが何であるかについての本当に良い説明ですが、あなたの質問への直接の答えは、郵便配達員とブラウザの次の違いのためでしょう。

ブラウザ:OPTIONSAPIエンドポイントに新しいリクエストを送信する前に、サーバータイプを確認し、ヘッダーを取得するための呼び出しを送信します。をチェックする場所Access-Control-Allow-Origin。これを考慮に入れるAccess-Control-Allow-Originヘッダーは、すべてのCROSS ORIGINSが許可されることを指定するだけですが、デフォルトではブラウザーは同じオリジンのみを許可します。

郵便集配人:直接送信しGETPOSTPUTDELETEで、ヘッダを取得し、サーバーの種類をチェックせずに等の要求をAccess-Control-Allow-Origin使用してOPTIONS、サーバーへの呼び出しを。


「新しいリクエストをAPIエンドポイントに送信する前に、OPTIONS呼び出しを送信してサーバーの種類を確認し、ヘッダーを取得します」—それは正しくありません。単純でない要求に対してのみそれを行います。
クエンティン

2

通常、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する場合は、編集してください。
BharathPabba20年

それはあなたのサーバーをddosから保護することができますか?
SuperUberDuper

-1

ブラウザ/ chrome postmanプラグインを使用して、WebサイトのようにCORS / SOPを確認します。これらのコントロールを回避するには、代わりにデスクトップアプリケーションを使用してください。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.