1. ホーム
  2. javascript

[解決済み] CORSはクロスドメインAJAXリクエストを行うための安全な方法ですか?

2023-05-13 16:27:02

質問

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ベースの認証/認可の他の手段でデータを保護する必要があります。