メインコンテンツまでスキップ

API Security

Overview

APIを作成する場合のセキュリティについてまとめる。

CSRF保護

CSRF(クロスサイト リクエスト フォージェリ)は、悪意のあるWebサイトがWebアプリのユーザーを騙して、明示的な同意なしにフォーム送信する攻撃。
CSRF攻撃から保護するには、Webサイトのみが生成および検証できるCSRFトークン値を保持する隠し入力フィールドを定義する必要がある。
これにより、悪意のあるWebサイトによってトリガーされたフォームの送信は失敗する。

CSPポリシーの定義

CSP(コンテンツ セキュリティ ポリシー)は、JavaScript、CSS、フォント、画像などを読み込むための信頼できるソースを定義することで、アプリケーションを XSS 攻撃から保護する。

CSP (Content Security Policy) は、ブラウザが表示するページで「どこからどんなリソースをロードしてよいか」というポリシーを定義する仕組みです。これにより、XSS 攻撃などで不正なスクリプトが読み込まれるのを防ぎます。

CSP解説

  1. サーバーがヘッダーを返す Content-Security-Policy: default-src 'self'; script-src 'self' https://cdn.example.com; というように、サーバーがHTTPヘッダーを設定(または <meta http-equiv="Content-Security-Policy" ...> でも可)
  2. ブラウザがヘッダーを読み取り、「これ以外のソースからのスクリプト等はブロック」 例:script-src ‘self’ なら「自サイトと指定CDN以外のスクリプトは拒否」
  3. 結果としてXSSが仕込みづらくなる
    攻撃者が悪意のあるスクリプトを埋め込んでも、CSPで許可されていないサイトからのスクリプト読み込みはブラウザ側でブロック。

設定場所

  • サーバーから返すHTTPヘッダーで設定するのが一般的。
  • Adonis.jsやExpress、あるいはNginxなどのリバースプロキシで、Content-Security-Policyヘッダーを付与すればOK

Resource

Adonis.js(サーバーレンダリングアプリケーションのセキュリティ保護)