11
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

cross-originの何がまずいのか

Posted at

クロスドメインはダメだダメだとよく聞くものの、腑に落ちなかったのでまとめてみました。

same-origin policy(SOP)とは

同一のドメイン(正確にはオリジン)でしか通信できませんというルール。
世の中のほぼすべてのブラウザはSOPに従っているため、クロスドメインは防がれている。

SOPって本当に必要??

Webサイト作成者とブラウザの利用者の視点で考えてみる。

SOPがない世界

サイト作成者
  • どこでもアクセスできるので、例えばtwitterとgmail両方を1画面に埋め込んだサイトとか作れて便利!
  • 悪意があればgmailの情報を勝手に抜くとかできちゃうけどね。
ブラウザの利用者
  • 危険なサイトにはアクセスしないよう注意する
  • 変なサイト踏んだら自己責任
世の中すべてのWebサイト作成者が善人なら便利な世界

SOPがある世界

サイト作成者
  • 自分で作ったサイト内でしか情報は読めない
  • 他サイトと勝手に連携できなくて不便
ブラウザの利用者
  • 何も考えずにサイトにアクセスしても安全

若干不便だけど、ブラウザの利用者は安心できる世界

どちらの世界を望むのか

というわけで普通のブラウザは利用者を守るためにSOPをつけている。
(デフォルトではSOPはONだが、利用者が自己責任を負うのであれば設定でOFFにもできる。)

とはいえ、自分のサイト内だけで完結する世界って不便だよね?

なんとかならんのか?
で、考えられた回避策がJSONPという仕組み。

JSONP

サイト作成者
  • 他サイトのscriptを自分のページに埋め込むことで他サイトと通信できる。
  • ただし、他サイトのscriptに悪意があれば自分のサイトの情報を抜かれる。
ブラウザの利用者
  • 何も考えずにサイトにアクセスしても安全
**Webサイト作成者なら危険な通信先の判断はできるでしょ?だからドメイン跨っても問題ないよね、**という考えかた。

便利だけどリスクある感じ...

いやいやそんな判断したくないし!
ということでCORSが登場する。

CORS

サイト作成者
  • 他サイトにうちのサイトと通信を許可してくれとお願いして
  • 許可してもらえばそのサイトと通信できるようになる。
他サイト
  • 通信を許可していいサイトを判断して登録する。
ブラウザの利用者
  • 何も考えずにサイトにアクセスしても安全
サイト間でお互いに通信していい相手か判断する健全な世界。

ただ、許可するサイトを登録したりめんどくさい。

まとめ

クロスドメインがダメなイメージばかり先行していたけれど、
・実際はいろいろな方法でドメインを跨った通信は行われている。
・誰がリスクを負うのか?と考えると、それぞれの方式が理解しやすい。

11
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
11
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?