[解決済み] CORSはクロスドメインAJAXリクエストを行うための安全な方法ですか?
質問
CORS (Cross-Origin Resource Sharing) について読んだ後、それがどのようにセキュリティを向上させるのかが理解できていません。クロスドメイン AJAX 通信は、正しい ORIGIN ヘッダーが送信された場合に許可されます。例として、私が以下を送信する場合
ORIGIN http://example.com
サーバーはこのドメインがホワイトリストにあるかどうかを確認し、ある場合はヘッダを表示します。
Access-Control-Allow-Origin。[受信したURLはこちら]
はレスポンスと一緒に送り返されます (これは単純なケースで、プリファイトされたリクエストもありますが、問題は同じです)。
これは本当に安全なのでしょうか?もし誰かが情報を受け取りたいのであれば、ORIGINヘッダを偽造することは本当につまらないことのように思えます。また、標準では、ポリシーはブラウザで実施され、Access-Control-Allow-Origin が正しくない場合は応答がブロックされると述べています。明らかに、誰かがその情報を得ようとしているなら、それをブロックするために標準的なブラウザを使用することはないでしょう。
どのように解決するのですか?
ウェブブラウザのJavaScriptでOriginヘッダを偽装することはできません。CORSはそれを防ぐために設計されています。
ウェブブラウザの外では、それは重要ではありません。一般に公開されているデータを取得することを阻止するようには設計されていません。公衆のメンバーがそれを取得することなく、公衆にそれを公開することはできません。
与えられるように設計されています。
- Ajaxでアクセスできるように設計されたAPIを提供するアリスさん
- Bob、ウェブブラウザを持つ人
- チャーリー、自分のウェブサイトを運営するサードパーティ
ボブがチャーリーのウェブサイトを訪れた場合、チャーリーはボブのブラウザにJSを送ることができないので、アリスのウェブサイトからデータを取ってきてチャーリーに送るようにします。
上記の状況は、ボブがアリスのウェブサイトにユーザアカウントを持ち、 コメントを投稿したり、データを削除したり、データを見たりといったことができる場合、 より重要になります。 ではなく 保護がなければ、Charlie の JS が Bob のブラウザに、Bob に隠れてそれを行うよう指示することができるからです (そして、その結果を Charlie に送る)。
もし権限のない人がデータを見るのを阻止したいのであれば、パスワード、SSLクライアント証明書、またはIDベースの認証/認可の他の手段でデータを保護する必要があります。
関連
-
[解決済み] Access-Control-Allow-Originヘッダーはどのように機能するのですか?
-
[解決済み] 私のJavaScriptコードは "No 'Access-Control-Allow-Origin' header is present on requested resource "というエラーを受け取りますが、Postmanはそうならないのはなぜですか?
-
[解決済み] jQueryを使ったAjaxリクエストの中断
-
[解決済み] REST APIからデータを取得しようとしたときに、要求されたリソースに'Access-Control-Allow-Origin'ヘッダーが存在しない。
-
[解決済み] プリフライト要求に対する応答がアクセス制御チェックを通過しない
-
[解決済み] jQuery AJAX クロスドメイン
-
[解決済み] CORSです。資格情報フラグが true の場合、Access-Control-Allow-Origin でワイルドカードを使用できない。
-
[解決済み】AngularJS がクロスオリジンリソースに対して OPTIONS HTTP リクエストを実行する場合
-
[解決済み】CORS(cross-origin resource sharing)投稿リクエストを動作させる方法
-
[解決済み] 兄弟ノードを選択する方法はありますか?
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] JavaScript で範囲を作成する - 奇妙な構文
-
[解決済み] ExtJS 4のイベントハンドリングについて
-
[解決済み] モバイルWeb HTML5フレームワークの選び方【終了しました
-
[解決済み] Reactコンポーネントでthis.setStateを複数回使用するとどうなりますか?
-
[解決済み] 無効になっている入力フィールドの値を送信する
-
[解決済み] JavaScriptで文字列を数値に変換する最速の方法は何ですか?
-
[解決済み] モデルフェッチ時に1をtrueに、0をfalseに変換する方法
-
[解決済み] 文字列とラベルのローカライズとグローバリゼーションのベストプラクティス【終了しました
-
[解決済み] Chromeのwebkitインスペクタで「Unsafe JavaScript attempt to access frame with URL...」というエラーが継続的に発生する。
-
[解決済み] Node.jsのES6クラスをrequireで作る