Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
CORS完全に理解した(したい)
Search
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
toshi00
August 28, 2023
Programming
0
23
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
35
Rustで エンジニアは絶対に使えない「TypoIME」を作ろう
toshi00
0
730
JtagAdapter制作記 seccamp2021 X-2 / jtagAdapter
toshi00
0
190
Other Decks in Programming
See All in Programming
AIと一緒にレガシーに向き合ってみた
nyafunta9858
0
250
Apache Iceberg V3 and migration to V3
tomtanaka
0
160
CSC307 Lecture 04
javiergs
PRO
0
660
KIKI_MBSD Cybersecurity Challenges 2025
ikema
0
1.3k
IFSによる形状設計/デモシーンの魅力 @ 慶應大学SFC
gam0022
1
310
Oxlint JS plugins
kazupon
1
980
なるべく楽してバックエンドに型をつけたい!(楽とは言ってない)
hibiki_cube
0
140
16年目のピクシブ百科事典を支える最新の技術基盤 / The Modern Tech Stack Powering Pixiv Encyclopedia in its 16th Year
ahuglajbclajep
5
1k
余白を設計しフロントエンド開発を 加速させる
tsukuha
7
2.1k
FOSDEM 2026: STUNMESH-go: Building P2P WireGuard Mesh Without Self-Hosted Infrastructure
tjjh89017
0
170
24時間止められないシステムを守る-医療ITにおけるランサムウェア対策の実際
koukimiura
1
110
[KNOTS 2026登壇資料]AIで拡張‧交差する プロダクト開発のプロセス および携わるメンバーの役割
hisatake
0
290
Featured
See All Featured
Leo the Paperboy
mayatellez
4
1.4k
Improving Core Web Vitals using Speculation Rules API
sergeychernyshev
21
1.4k
Why Mistakes Are the Best Teachers: Turning Failure into a Pathway for Growth
auna
0
54
How to Grow Your eCommerce with AI & Automation
katarinadahlin
PRO
1
110
We Have a Design System, Now What?
morganepeng
54
8k
Fantastic passwords and where to find them - at NoRuKo
philnash
52
3.6k
How to build an LLM SEO readiness audit: a practical framework
nmsamuel
1
650
First, design no harm
axbom
PRO
2
1.1k
VelocityConf: Rendering Performance Case Studies
addyosmani
333
24k
Building an army of robots
kneath
306
46k
Faster Mobile Websites
deanohume
310
31k
Digital Ethics as a Driver of Design Innovation
axbom
PRO
1
180
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