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
Next.js で始めるセキュリティ入門
Search
Shumpei O.
March 27, 2025
Technology
0
7
Next.js で始めるセキュリティ入門
2025/3/27
エンジニアコミュニティ内での登壇
Shumpei O.
March 27, 2025
Tweet
Share
More Decks by Shumpei O.
See All by Shumpei O.
例外処理について考える
shumpei0111
0
200
Reactで汎用的なinputコンポーネントを考える
shumpei0111
0
130
複数人での 大規模サイト移植のテクニック
shumpei0111
1
930
個人開発者は Jamstackでブログを書こう!〜WordPressもいいけどJamstackもね〜
shumpei0111
0
150
Other Decks in Technology
See All in Technology
形式手法特論:コンパイラの「正しさ」は証明できるか? #burikaigi / BuriKaigi 2026
ytaka23
14
3.6k
AIエージェントを5分で一気におさらい!AIエージェント「構築」元年に備えよう
yakumo
1
140
自己管理型チームと個人のセルフマネジメント 〜モチベーション編〜
kakehashi
PRO
5
1.5k
[Data & AI Summit '25 Fall] AIでデータ活用を進化させる!Google Cloudで作るデータ活用の未来
kirimaru
0
4.2k
Bedrock AgentCore Evaluationsで学ぶLLM as a judge入門
shichijoyuhi
2
310
AWS re:Invent 2025 を振り返る
kazzpapa3
2
110
AI with TiDD
shiraji
1
330
AI との良い付き合い方を僕らは誰も知らない (WSS 2026 静岡版)
asei
1
210
Agentic AIが変革するAWSの開発・運用・セキュリティ ~Frontier Agentsを試してみた~ / Agentic AI transforms AWS development, operations, and security I tried Frontier Agents
yuj1osm
0
200
Claude Codeを使った情報整理術
knishioka
19
11k
研究開発部メンバーの働き⽅ / Sansan R&D Profile
sansan33
PRO
4
21k
Eight Engineering Unit 紹介資料
sansan33
PRO
0
6.1k
Featured
See All Featured
The Power of CSS Pseudo Elements
geoffreycrofte
80
6.1k
Bash Introduction
62gerente
615
210k
Designing Dashboards & Data Visualisations in Web Apps
destraynor
231
54k
SEO in 2025: How to Prepare for the Future of Search
ipullrank
3
3.3k
CoffeeScript is Beautiful & I Never Want to Write Plain JavaScript Again
sstephenson
162
16k
Tips & Tricks on How to Get Your First Job In Tech
honzajavorek
0
400
A Tale of Four Properties
chriscoyier
162
23k
The Spectacular Lies of Maps
axbom
PRO
1
410
Jamie Indigo - Trashchat’s Guide to Black Boxes: Technical SEO Tactics for LLMs
techseoconnect
PRO
0
34
More Than Pixels: Becoming A User Experience Designer
marktimemedia
2
270
The Straight Up "How To Draw Better" Workshop
denniskardys
239
140k
How to audit for AI Accessibility on your Front & Back End
davetheseo
0
140
Transcript
Next.jsで始める セキュリティ入門 Shumpei / 2025.3.27
Shumpei フロントエンドエンジニア X: @seventhseven https://x.com/seventhseven 自己紹介
今日のゴール • Webアプリケーションにおけるセキュリティについて知るきっかけに • XSSに対して、Next.jsで実施する対応方法がわかる
おことわり - 今回は自分なりにまとめたことを共有する。 という形で発表します - Webアプリケーションを想定しています
結論 • XSSについて、React(JSX)についてはデフォルトでサポートされている • ただそれだけでは対応できない箇所があるので、 穴を塞ぐ意味でもやれておくことに越したことない
アジェンダ • 代表的なセキュリティリスク • セキュリティリスクへの対策 • 実装例 • まとめ
アジェンダ • 代表的なセキュリティリスク 👈 • セキュリティリスクへの対策 • 実装例 • まとめ
☠🔥 XSS クロスサイト・スクリプティング 悪意あるスクリプトがアプリに埋め込ま れ、 そのスクリプトを読み込んだユーザのブ ラウザ上で実行されてしまう 攻撃 ☝今回はこの話 代表的なセキュリティリスク
☠🔥 CSRF クロスサイト・リクエストフォージェリ 認証済みユーザの権限を悪用する。悪 意あるサイト上に誘導し、その中でスク リプト実行やリンクを踏むことで好き勝 手されてしまう攻撃
☠🔥 認証・セッション管理 ログイン情報(Cookie属性など)・セッ ションID・トークンの期限設定などの管 理不足からくる不正アクセス 代表的なセキュリティリスク ☠🔥 認可・API保護など APIに権限を設定していなかったり、アク セストークンや認可チェックが不十分だ
と管理者用APIを呼び出せてしまう可能 性がある
アジェンダ • 代表的なセキュリティリスク • セキュリティリスクへの対策 👈 • 実装例 • まとめ
XSSに対応する 前提 ・ React(JSX)では {Value} とブラケットで囲えばデフォルトでエスケープされるため、 基本的な対策はされている ・ただし、それだけでは不十分な場合がある ・img タグの
onerror に fetch スクリプトが書かれていて対策が不十分な場合に実 行してしまうなどがある
XSSに対応する 引用: https://vercel.com/guides/understanding-xss-attacks
ユーザが自由に入力したものを出力する場合、バリデーション・エスケープ やサニタイズが必要 XSSに対応する 📝 エスケープ スクリプトとして解釈できない文字列に 変換し、見た目は維持しながら無効化 すること < …変換...
< > …変換... > 📝 サニタイズ そもそもリスクになりうる文字列を削除 すること (DOMPurifyなどを使う) https://www.npmjs.com/package/dompurify
XSSに対応する コンテンツセキュリティポリシー( CSP)の導入 ・ CSPはブラウザ側で読み込めるコンテンツのソースを制限することができます。自分 のサイトが提供するもの以外は実行しないようにすることが出来ます。 https://vercel.com/docs/headers/security-headers ・next.config.js や、 middleware.js
に設定することも出来ます。 https://nextjs.org/docs/app/building-your-application/configuring/content-security-policy
XSSに対応する EX: クリックジャッキング対策 ・X-Frame-Options を HTTP ヘッダに追加し、iframe や frame タグで表示するコンテンツを制限するこ
と ができます。 ・next.config.js や、 middleware.js に設定することも出来ます。 https://blog.logrocket.com/using-next-js-security-headers/#:~:text=The%20%60X,not%20emb edded%20in%20other%20websites https://www.ipa.go.jp/security/vuln/websecurity/clickjacking.html
EX: MIMEスニッフィング対策 ・X-Content-Type-Options を HTTP ヘッダに追加し、ブラウザが読み込める MIME タ イプを 制限することができます。
・HTTP の仕様で、 Content-Type を指定してデータを送信することで、データの種類や 形式を伝えている ただし、ブラウザ側ではこの指定を従わずに送られたデータを自分で推測している XSSに対応する
EX: MIMEスニッフィング対策 なんで?👇 ・メディアタイプの指定がない場合や、サーバ管理者が指定を誤った場合でもコンテンツ を適切に処理するようにするために行われるもので、 ファイルの拡張子や、データの中身から推測している。 そしてContent-Typeを設定しても無視される(らしい) XSSに対応する
EX: MIMEスニッフィング対策 ・この仕様を悪用して、本来実行できないはずのファイル形式を読み込んで、 悪意あるスクリプトを実行する攻撃 ・ヘッダに X-Content-Type-Options: nosniff を指定することで、MIMEスニッフィングを行わず、 サーバがContent-Typeを指定したメディアタイプに必ず従うようになります。 XSSに対応する
アジェンダ • 代表的なセキュリティリスク • セキュリティリスクへの対策 • 実装例 👈 • まとめ
next.config.js の headers に設定する 実装例 const nextConfig = { async
headers() { return [ { source: "/(.*)", headers: [ { key: "X-Frame-Options", value: "DENY" }, { key: "Content-Security-Policy", value: "default-src 'self' 'https://example.com'; image-src 'https://unsplash.com'; script-src 'self' https://www.google-analytics.com; font-src 'self' 'https://fonts.googleapis.com'", }, { key: "X-Content-Type-Options", value: "nosniff" }, ], }, ]; }, }; module.exports = nextConfig;
実装例 レスポンスを確認するとヘッダに追加されていることがわかる
アジェンダ • 代表的なセキュリティリスク • セキュリティリスクへの対策 • 実装例 • まとめ 👈
まとめ 👉 アプリケーションの防御は色々ある • 今回はXSSについて話しましたが、CSRFやセッションハイジャックなど、色々対策する必要 があります 👉 対策の考え方 • XSSについてはデータが入力される時も大事だが、出力時に気をつけることが大事
ありがとうございました