Closed7

CORSで躓いたのでこれを機に理解する

mu-sukemu-suke

CORSってなに?

日本語訳するとオリジン間リソース共有

あるオリジンで動作しているウェブアプリケーションに、異なるオリジンにある選択されたリソースへのアクセス権を与えるようブラウザーに指示するための仕組み

例えば
siteA.comは同一ドメインのsiteA.comのウェブサーバーから画像を取得できるが、
siteB.comsiteA.comのウェブサーバーから原則画像を取得できない

mu-sukemu-suke

なぜCORSが必要なの?

公開したAPIは全世界で利用されるということを前提に置いていて、CORSの仕組みがないと悪意のあるユーザーが外部から無限に叩けるAPI(オープンAPIみたいな)になってしまう。

それを防ぐためにCORSが存在し、許可をしたオリジンでのみ呼び出せるようになっている。

また、これによってXSSやCSRFを防ぐことができるようになっている

mu-sukemu-suke

ただCORSはAPI側の設定であって、XSSやCSRFはクライアント側の脆弱性なんじゃないの?
と疑問に思っているのでそこの解消をする

mu-sukemu-suke

Same-Origin Policyはコンテンツのプライバシーを他サイトから守るために重要ですが、裏を返せば、Same-Originでさえあれば何でもできるということでもあります。XSSとは、何らかの方法で攻撃者がOriginのサイト上でJavaScriptを実行させることで、Same-Origin Policyの制限を回避することです。

XSSのような仕掛けをして任意のJavaScriptを動作させることに成功すれば何でもできます。しかし、より狭い範囲でSame-Origin Policyによるセキュリティーを悪用しようとすれば、URIひとつで十分とも考えられます。

なるほど
https://qiita.com/masaoki/items/dea5843c9baf59bee2dc

mu-sukemu-suke

Same-Originでも致命的なAPIを叩かれたら終わりだけど、少なくとも別オリジンのurlからその致命的なAPIを叩かせないようにするのがSame-Origin Policy

ただSame-Originにおいてのルールはないので別の方法でXSSやCSRFの対策をする必要がある

mu-sukemu-suke

結論

  • オリジン間リソース共有のこと
  • Same-Origin Policyによって同一オリジンからのアクセスしか許されていないAPIを別オリジンからでも呼び出しを許可する仕組み
  • ただしAccess-Control-Allow-Origin: *は危険
このスクラップは2022/07/14にクローズされました