1. ホーム
  2. ajax

[解決済み] CORS を有効にするのはいつが安全ですか?

2023-05-29 12:09:37

質問

私はJSON/REST Web APIを開発しており、特に第三者のウェブサイトがAJAXを通して私のサービスを呼び出せるようにしたいと思っています。したがって、私のサービスは有名なCORSヘッダを送信しています。

Access-Control-Allow-Origin: *

これにより、サードパーティのサイトがAJAXを通して私のサービスを呼び出すことができます。今のところすべて順調です。

しかし、私のウェブ API のサブセクションは非公開であり、認証を必要とします(OAuth と access_token cookie によるかなり標準的なもの)。私のサイトのこの部分でも CORS を有効にすることは安全ですか?

一方では、第三者の Web サイトが私のサービスのこの部分と対話する ajax クライアントを持つことができれば、それはクールでしょう。しかし、そもそも同一生成元ポリシーが存在する理由は、これが危険である可能性があるからです。その後に訪問するどのウェブサイトでも、プライベートなコンテンツにアクセスできるようになることは避けたいものです。

私が恐れているシナリオは、ユーザーが私の Web API でログインし、Web サイトまたは信頼する Web サイトを通じてログインし、ログアウトするのを忘れたというものです。この場合、そのユーザーがその後訪問した他のすべての Web サイトが、既存のセッションを使用してプライベート コンテンツにアクセスできるようになるのでしょうか?

そこで、私の質問です。

  • 非公開のコンテンツで CORS を有効にすることは安全ですか?
  • CORS を有効にしたサーバーがクッキーを介して session_token を設定する場合、このクッキーは CORS サーバーまたはメイン Web ページ サーバーのドメイン下に保存されますか?

どのように解決するのですか?

2 つ目の質問 (CORS が有効なサーバーがクッキーを介して session_token を設定する場合...?) の答えとして、クッキーは CORS サーバーのドメイン下に保存されます。メイン Web ページの JS コードは、Cookie にアクセスできません。 document.cookie . クッキーがサーバーに送信されるのは .withCredentials プロパティが設定されたときのみサーバに送信され、その場合でも、サーバが Access-Control-Allow-Credentials ヘッダが設定されているときのみ受け付けられます。

最初の質問は、もう少しオープンエンドなものです。これはかなり安全ですが、物事を回避する方法があります。たとえば、攻撃者は DNS ポイズニング手法を使用して、プリフライト リクエストが実際のサーバーに当たるようにし、実際の CORS リクエストは不正なサーバーに送信することができます。CORS のセキュリティに関するその他のリソースを以下に示します。

最後に、あなたの懸念は を与えることです。 ウェブサイトが CORS データにアクセスできるようになることです。これを防止するため、CORS データにアクセスするために Access-Control-Allow-Origin: * ヘッダを使用しないでください。代わりに、ユーザーのOriginの値をエコーバックする必要があります。例えば

Access-Control-Allow-Origin: http://www.example.com

このヘッダは http://www.example.com のみがレスポンスデータにアクセスできるようにします。