Next.js アプリケーションにコンテンツセキュリティポリシー (CSP) を設定する方法
Content Security Policy (CSP)は、クロスサイトスクリプティング(XSS)、クリックジャッキング、その他のコードインジェクション攻撃など、さまざまなセキュリティ脅威からNext.jsアプリケーションを保護するために重要です。
CSPを使用することで、開発者はコンテンツソース、スクリプト、スタイルシート、画像、フォント、オブジェクト、メディア(オーディオ、ビデオ)、iframeなどに対して許可されるオリジンを指定できます。
ナンス(Nonce)
ナンスは、一度限りの使用のために作成される一意のランダムな文字列です。CSPと組み合わせて使用することで、厳格なCSPディレクティブをバイパスして特定のインラインスクリプトやスタイルの実行を選択的に許可します。
ナンスを使用する理由
CSPは悪意のあるスクリプトをブロックするように設計されていますが、インラインスクリプトが必要な正当なシナリオもあります。そのような場合、ナンスは正しいナンスを持つこれらのスクリプトの実行を許可する方法を提供します。
ミドルウェアでナンスを追加する
ミドルウェアを使用すると、ページがレンダリングされる前にヘッダーを追加し、ナンスを生成できます。
ページが表示されるたびに、新しいナンスを生成する必要があります。これは、ナンスを追加するために動的レンダリングを使用する必要があることを意味します。
例:
デフォルトでは、ミドルウェアはすべてのリクエストで実行されます。matcher
を使用して、特定のパスでミドルウェアを実行するようにフィルタリングできます。
CSPヘッダーを必要としないプリフェッチ(next/link
からの)と静的アセットのマッチングを無視することをお勧めします。
ナンスの読み取り
ナンスをページに提供するには
getServerSideProps
を使用します:
ナンスなしの場合
ナンスを必要としないアプリケーションでは、next.config.js
ファイルに直接CSPヘッダーを設定できます:
バージョン履歴
ナンスを適切に処理および適用するには、Next.jsのv13.4.20+
を使用することをお勧めします。