[解決済み] CORS を有効にするのはいつが安全ですか?
質問
私は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 のセキュリティに関するその他のリソースを以下に示します。
- http://code.google.com/p/html5security/wiki/CrossOriginRequestSecurity
- owasp.org CORS CheatSheet (英語)
最後に、あなたの懸念は
を与えることです。
ウェブサイトが CORS データにアクセスできるようになることです。これを防止するため、CORS データにアクセスするために
Access-Control-Allow-Origin: *
ヘッダを使用しないでください。代わりに、ユーザーのOriginの値をエコーバックする必要があります。例えば
Access-Control-Allow-Origin: http://www.example.com
このヘッダは
http://www.example.com
のみがレスポンスデータにアクセスできるようにします。
関連
-
これだけ読めばOK! -Ajaxの説明
-
Jquery EasyUI +Ajax +Json +汎用ハンドラで、データのフロントエンドとバックエンドのインタラクションを実現 --- Goodness Commune Project
-
[解決済み] 認証とセッション管理に関するSPAのベストプラクティス
-
[解決済み】ASP.net Core WebAPIでCORSを有効にする方法
-
[解決済み】CORS(cross-origin resource sharing)投稿リクエストを動作させる方法
-
[解決済み] IEでjQueryのajaxを呼び出すと「No Transport」エラーが発生する。
-
[解決済み] Django に最適な AJAX ライブラリは?[クローズド]
-
[解決済み] CORS - httpリクエストの「プリフライト」はどうやるの?
-
[解決済み] jQuery が POST パラメータとして文字列を送信する
-
[解決済み] valueChangeListenerとf:ajaxリスナーのどちらを使うべきか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
これだけ読めばOK! -Ajaxの説明
-
Jquery EasyUI +Ajax +Json +汎用ハンドラで、データのフロントエンドとバックエンドのインタラクションを実現 --- Goodness Commune Project
-
[解決済み] Access-Control-Allow-Originですべてのドメインを許可する設定にした場合、どのようなセキュリティリスクがありますか?
-
[解決済み] 同じサーバーの異なるポートはクロスドメインとみなされますか?(Ajax的な意味で)
-
[解決済み] IEでjQueryのajaxを呼び出すと「No Transport」エラーが発生する。
-
[解決済み] Django に最適な AJAX ライブラリは?[クローズド]
-
[解決済み] jQuery が POST パラメータとして文字列を送信する
-
[解決済み] Symfony 2.0 AJAX アプリケーションで Doctrine のエンティティを JSON にエンコードするには?
-
[解決済み] valueChangeListenerとf:ajaxリスナーのどちらを使うべきか?