Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Next.js で始めるセキュリティ入門

Next.js で始めるセキュリティ入門

2025/3/27
エンジニアコミュニティ内での登壇

Avatar for Shumpei O.

Shumpei O.

March 27, 2025
Tweet

More Decks by Shumpei O.

Other Decks in Technology

Transcript

  1. ☠🔥 XSS クロスサイト・スクリプティング 悪意あるスクリプトがアプリに埋め込ま れ、 そのスクリプトを読み込んだユーザのブ ラウザ上で実行されてしまう 攻撃 ☝今回はこの話 代表的なセキュリティリスク

    ☠🔥 CSRF クロスサイト・リクエストフォージェリ 認証済みユーザの権限を悪用する。悪 意あるサイト上に誘導し、その中でスク リプト実行やリンクを踏むことで好き勝 手されてしまう攻撃
  2. 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
  3. EX: MIMEスニッフィング対策 ・X-Content-Type-Options を HTTP ヘッダに追加し、ブラウザが読み込める MIME タ イプを  制限することができます。

    ・HTTP の仕様で、 Content-Type を指定してデータを送信することで、データの種類や 形式を伝えている  ただし、ブラウザ側ではこの指定を従わずに送られたデータを自分で推測している XSSに対応する
  4. 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;