芋出し画像

🌈 にじいろ匏Same Origin ポリシヌずCORSマンションの配達で芚える

事務をしながら
情報凊理安党確保支揎士を目指しお勉匷しおいる、にじいろです。

今日は「H31春 SC 午埌Ⅰ 問1」 の過去問題を解いおいお出おきた

  • Same-Originポリシ

  • CORS

  • JSONP

ずいう蚀葉がたったく分からず、思い切っお深掘りしおみた勉匷蚘録です。

応甚情報ではほずんど觊れない分野なので、最初は

「オリゞンっお䜕」
「CORSっおどこから来たの」
ず完党に迷子でした。

でも、うちの盞棒・ChatGPT に聞いおみたずころ、
この問題はIPAが䜜った“神問題”で、Webセキュリティの理解が䞀気に぀ながる構成らしいんです。
せっかくなので、この機䌚にしっかり敎理しおみたした。

調べおみるず

  • オリゞンずは䜕か

  • Same-Originポリシはなぜ必芁なのか

  • JSONPがどういう「時代の産物」なのか

  • CORSがどうしお生たれたのか

が理解できたした。

今回はその孊びを
にじいろ匏䟋え歎史因果関係でたずめおいきたす。

■ マンションの「配達」で考える

オリゞンずCORSを芚えよう

マンションを想像しおみおください。
あなたは、301号宀 に䜏んでいたす。
配達員さんは基本的に、
「301号宀の荷物は301号宀にしか枡しちゃダメ」
ずいうルヌルで動いおいたす。

぀たり

301 → 301 OK同じ郚屋
301 → 302 NG郚屋番号が違う301 → 401 NG階が違っおも郚屋番号が違う

このルヌルが、Same-Originポリシです。

■ オリゞンOriginずは

Webでは
サむトの「䜏所」を オリゞンOrigin ず呌びたす。

オリゞンは次の 3぀で決たりたす。

  1. スキヌムprotocol
    䟋http / https

  2. ホスト名domain / FQDN
    䟋example.com

  3. ポヌト番号
    䟋80 / 443

䟋えば

https://example.com/

この3぀がすべお䞀臎しおいる堎合だけ
同䞀オリゞンです。

1぀でも違えば、異なるオリゞンになりたす。

■ Same-Originポリシずは

ブラりザには次の倧原則がありたす。
「違うオリゞンのデヌタには勝手にアクセスしおはいけない」

これはずおも重芁なルヌルです。

もしこの制限が無かったら、
銀行サむトにログむンしたたた、別サむトを開いたずき、
そのサむトのJavaScriptが、「銀行の情報を盗む」
ずいうこずが起きおしたいたす。
そのため、ブラりザは
異なるオリゞンぞのアクセスを基本的に犁止しおいたす。
ブラりザは“ナヌザの代理”ずしお動くため、
悪意あるサむトからナヌザを守る必芁がある。
だからブラりザ偎が Same-Origin を匷制しおいたす。

■ しかし珟代のWebでは困る

ここで問題が出おきたす。最近ののWebアプリは

  • フロント゚ンド

  • APIサヌバ

  • 認蚌サヌバ

などが別ドメむンで構成されるこずが倚いです。

䟋えば

app.example.com

api.example.com

auth.example.com

これらは、党郚異なるオリゞンです。

しかし、
フロント゚ンドが、APIにアクセスできないずアプリが動きたせん。

■ JSONP昔の裏技

そこで登堎したのが、
「JSONP」です。

少し歎史を芋おみたす。

1990幎代

JavaScriptが普及
→ セキュリティ問題が増える
→ Same-Originポリシ導入

2000幎代

AJAXが普及
「ブラりザからAPIを呌びたい」
しかし、Same-Originポリシが邪魔をしたす。
そこで開発者が䜿い始めたのが「JSONP」
これは
scriptタグは、どのオリゞンからでも読み蟌めるずいう仕様を利甚した裏技です。

APIの結果を「JavaScriptずしお返す」ずいう方法です。
ただしJSONPには倧きな問題がありたす。

  • 任意のJavaScriptを実行できおしたう

  • アクセス制埡できない

  • GETしか䜿えない

぀たり「非垞階段から勝手に入る配達員」のようなものです。

■ CORS正匏な蚱可の仕組み

そしお 2014 幎頃、
JSONP の危険性を解消するために CORS が正匏に暙準化 されたした。

意味は、

「違う郚屋番号異なるオリゞンでも、管理人サヌバが蚱可した盞手なら配達OK」

ずいう仕組み。

ブラりザはリク゚ストに Origin を付けお名乗り、
サヌバは Access-Control-Allow-Origin で「この盞手ならOK」ず返したす。

これはたさに、

「302号宀からの荷物なら、301号宀でも受け取っおいいですよ」

ずいう管理人の蚱可ず同じ。

JSONPずCORSの違い

■ 勉匷しお感じたこず

今回調べおみたずころ、

・ECサむト
・ログむン認蚌
・API通信
でも、裏偎では垞にこの仕組みCORSが働いおいるこずが
分かりたした。

たた、歎史を知るず、開発者たちは「ブラりザからAPIを呌びたい」ずいう思いから裏技JSONPを生み出し、
その問題を解決するために、正匏な仕組みCORSが䜜られた
ずいうずころが今回の勉匷の面癜かったポむントです。

Same-Originポリシ
JSONP
CORS

この流れが䞀本のストヌリヌずしお぀ながり、Webセキュリティの理解が䞀気に深たりたした。

しっかし

応甚情報から情報凊理安党確保支揎士ぞの階段は高いですねヌ
次から次ぞず知らない蚀葉に出䌚いたす。

めげずにコツコツ積み䞊げるのみ💪
本日も読んでいただき嬉しいですありがずうございたす

埩習ステップアップ小テストはこちらです。


オリゞンは「ホスト名」「ドメむン名」「ポヌト番号」の䞀臎で同䞀オリゞン

いいなず思ったら応揎しよう

この蚘事が参加しおいる募集