Lock in $30 Savings on PRO—Offer Ends Soon! ⏳
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
CORS完全に理解した(したい)
Search
toshi00
August 28, 2023
Programming
0
22
CORS完全に理解した(したい)
CORSについて簡単に紹介する資料です
https://github.com/toshi-pono/CORS-practice
toshi00
August 28, 2023
Tweet
Share
More Decks by toshi00
See All by toshi00
aiotraQで爆速BOT開発!
toshi00
0
25
Rustで エンジニアは絶対に使えない「TypoIME」を作ろう
toshi00
0
720
JtagAdapter制作記 seccamp2021 X-2 / jtagAdapter
toshi00
0
170
Other Decks in Programming
See All in Programming
TypeScriptで設計する 堅牢さとUXを両立した非同期ワークフローの実現
moeka__c
5
2.7k
レイトレZ世代に捧ぐ、今からレイトレを始めるための小径
ichi_raven
0
480
Combinatorial Interview Problems with Backtracking Solutions - From Imperative Procedural Programming to Declarative Functional Programming - Part 1
philipschwarz
PRO
0
110
モデル駆動設計をやってみよう Modeling Forum2025ワークショップ/Let’s Try Model-Driven Design
haru860
0
210
UIデザインに役立つ 2025年の最新CSS / The Latest CSS for UI Design 2025
clockmaker
8
2.9k
All(?) About Point Sets
hole
0
230
モダンJSフレームワークのビルドプロセス 〜なぜReactは503行、Svelteは12行なのか〜
fuuki12
0
150
『実践MLOps』から学ぶ DevOps for ML
nsakki55
2
490
Evolving NEWT’s TypeScript Backend for the AI-Driven Era
xpromx
0
210
CSC305 Lecture 15
javiergs
PRO
0
210
Querying Design System デザインシステムの意思決定を支える構造検索
ikumatadokoro
1
1.2k
Web エンジニアが JavaScript で AI Agent を作る / JSConf JP 2025 sponsor session
izumin5210
4
2.1k
Featured
See All Featured
Testing 201, or: Great Expectations
jmmastey
46
7.8k
How GitHub (no longer) Works
holman
316
140k
Practical Orchestrator
shlominoach
190
11k
Agile that works and the tools we love
rasmusluckow
331
21k
Build The Right Thing And Hit Your Dates
maggiecrowley
38
2.9k
The Cult of Friendly URLs
andyhume
79
6.7k
For a Future-Friendly Web
brad_frost
180
10k
StorybookのUI Testing Handbookを読んだ
zakiyama
31
6.4k
Building a Scalable Design System with Sketch
lauravandoore
463
34k
Facilitating Awesome Meetings
lara
57
6.6k
What’s in a name? Adding method to the madness
productmarketing
PRO
24
3.8k
Java REST API Framework Comparison - PWX 2021
mraible
34
9k
Transcript
CORS完全に理解した(したい) @toshi00_p 2023.08.28
今⽇やること たまによくあるエラー CORSでブロックされた!ってときに何が起きてるか ちょっとだけ理解する CORSと仲良く開発しよう! 2/17
今⽇やること CORS:オリジン間リソース共有 1. オリジンとは? 2. CORSの仕組み 3. CORSの必要性 扱わないこと •
プリフライトリクエスト • HTMLタグ内でのリクエスト(img, iframe, canvasなど) • Cookie 3/17
CORS = オリジン間リソース共有、 Cross-Origin Resource Sharing 4/17 CORSとは クロスオリジンのときに
リソースを使えるようにする サーバーからブラウザへの許可 APIリクエストと そのレスポンス オリジンが違う 同⼀オリジンのリクエストは常に許可 クロスオリジンのリクエストは基本は禁⽌ → (でもアクセスしたい)→ CORSで個別に許可 許可に応じて ブラウザが制御
CORS = オリジン間リソース共有、 Cross-Origin Resource Sharing 5/17 CORSとは クロスオリジンのときに
リソースを使えるようにする サーバーからブラウザへの許可 APIリクエストと そのレスポンス オリジンが違う 同⼀オリジンのリクエストは常に許可 クロスオリジンのリクエストは基本は禁⽌ → (でもアクセスしたい)→ CORSで個別に許可 許可に応じて ブラウザが制御
1. クロスオリジン? 6/17 オリジンとは https://example.com:443 host name port scheme リクエスト元
リクエスト先 https://example.com https://example.com same-origin: 完全一致 https://dev.example.com cross-origin: サブドメイン https://example.com:8080 cross-origin: 異なるポート オリジン = スキーム(プロトコル) + ホスト名 + ポート
1. クロスオリジン? 7/17 (おまけ) origin と site 対象:https://example.com same-origin same-site
same-site かどうかは cookie の送信で関係してくる same-site: eTLD+1が同じ(雑に書くと、ドメインの持ち主が同⼀) https://example.com https://example.com:443 https://github.com https://google.com http://example.com https://dev.example.com https://example.com:8080
CORS = オリジン間リソース共有、 Cross-Origin Resource Sharing 8/17 CORSとは クロスオリジンのときに
リソースを使えるようにする サーバーからブラウザへの許可 APIリクエストと そのレスポンス オリジンが違う 同⼀オリジンのリクエストは常に許可 クロスオリジンのリクエストは基本は禁⽌ → (でもアクセスしたい)→ CORSで個別に許可 許可に応じて ブラウザが制御
2. CORSの仕組み 9/17 JSエンジン*¹ ブラウザ サーバー *1: 実際には、JSエンジンはブラウザの内部に組み込まれている *2: 単純リクエストでない場合は、許可がなければリクエストも送信しない
リクエストの送信を要求 レスポンス 許可されて いなければ 破棄 レスポンス リクエストを送信*² フロントエンド開発 バックエンド開発
2. CORSの仕組み 10/17 CORSのヘッダー ※ 許可の申請(クライアントからサーバー)はブラウザが自動でやってくれる。FE側でやることは特にない。 許可(サーバーからクライアント) • Access-Control-Allow-Origin •
Access-Control-Allow-Credentials • Access-Control-Allow-Headers • Access-Control-Allow-Methods • Access-Control-Expose-Headers • Access-Control-Max-Age 許可の申請(クライアントからサーバー※) • Origin • Access-Control-Request-Headers • Access-Control-Request-Method
2. CORSの仕組み(許可の例) 11/17 Access-Control-Allow-Origin JSエンジン JSエンジン https://site.example https://evil.example https://api.example Access-Control-Allow-Origin:
https://site.example 許可したオリジンのみレスポンスを取得できる
2. CORSの仕組み(許可の例) 12/17 Access-Control-Expose-Headers JSエンジン JSエンジン https://site.example https://site.example https://api.example Access-Control-Expose-Headers:
Myheader CORSセーフリストレスポンスヘッダーは、許可なしに取得できる (Cache-Control, Content-Length, Content-Language, Content-Type, Expires, Last-Modified, Pragma) Myheader: hogehoge Myheader: undefined 許可あり 許可なし
3. CORSの必要性 13/17 CSRF脆弱性 今回のケースはCookieの設定も良くない……かも なお、CORSだけでは防げないパターンもあるので注意が必要 https://api.example https://site.example https://evil.example ログイン:
Cookieがapi.exampleに 対して付与 ①ログイン ②アクセス ③勝手に リクエスト ④レスポンス ⑤レスポンスを覗 き見 CORSがないので リクエストできる
CORS = オリジン間リソース共有、 Cross-Origin Resource Sharing 14/17 CORSとは クロスオリジンのときに
リソースを使えるようにする サーバーからブラウザへの許可 APIリクエストと そのレスポンス オリジンが違う 同⼀オリジンのリクエストは常に許可 クロスオリジンのリクエストは基本は禁⽌ → (でもアクセスしたい)→ CORSで個別に許可 許可に応じて ブラウザが制御
終わりに CORSで重要なポイント Origin Access-Controll-Allow-Origin 単純リクエスト プリフライトリクエスト CORS完全に理解した!(わからん) 15/17
参考 • オリジン間リソース共有 (CORS) https://developer.mozilla.org/ja/docs/Web/HTTP/CORS • フロントエンド開発のためのセキュリティ⼊⾨ 16/17