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
toshi00
August 28, 2023
Programming
0
20
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
710
JtagAdapter制作記 seccamp2021 X-2 / jtagAdapter
toshi00
0
160
Other Decks in Programming
See All in Programming
Vue 3.6 時代のリアクティビティ最前線 〜Vapor/alien-signals の実践とパフォーマンス最適化〜
hiranuma
2
370
data-viz-talk-cz-2025
lcolladotor
0
110
EMこそClaude Codeでコード調査しよう
shibayu36
0
580
エンジニアインターン「Treasure」とHonoの2年、そして未来へ / Our Journey with Hono Two Years at Treasure and Beyond
carta_engineering
0
480
pnpm に provenance のダウングレード を検出する PR を出してみた
ryo_manba
1
180
Verilator + Rust + gRPC と Efinix の RISC-V でAIアクセラレータをAIで作ってる話 RTLを語る会(18) 2025/11/08
ryuz88
0
190
Pythonに漸進的に型をつける
nealle
1
150
AIと人間の共創開発!OSSで試行錯誤した開発スタイル
mae616
2
870
AI Agent 時代的開發者生存指南
eddie
4
2.3k
Researchlyの開発で参考にしたデザイン
adsholoko
0
110
CSC305 Lecture 11
javiergs
PRO
0
320
HTTPじゃ遅すぎる! SwitchBotを自作ハブで動かして学ぶBLE通信
occhi
0
190
Featured
See All Featured
Producing Creativity
orderedlist
PRO
348
40k
How to train your dragon (web standard)
notwaldorf
97
6.3k
The MySQL Ecosystem @ GitHub 2015
samlambert
251
13k
It's Worth the Effort
3n
187
28k
Fashionably flexible responsive web design (full day workshop)
malarkey
407
66k
Improving Core Web Vitals using Speculation Rules API
sergeychernyshev
21
1.2k
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
52
5.7k
The Straight Up "How To Draw Better" Workshop
denniskardys
239
140k
Chrome DevTools: State of the Union 2024 - Debugging React & Beyond
addyosmani
9
950
Documentation Writing (for coders)
carmenintech
76
5.1k
The Art of Programming - Codeland 2020
erikaheidi
56
14k
Raft: Consensus for Rubyists
vanstee
140
7.2k
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