CSP nonce
リクエストごとに生成するランダムな文字列で、'unsafe-inline' を使わずに特定のインラインスクリプトだけをCSPの下で許可する。CSPヘッダーにnonceを設定し、同じ値を<script>タグのnonce属性にも付ける。
流れ:サーバーがリクエストごとに新しいnonceを生成し、ヘッダー(Content-Security-Policy: script-src 'nonce-xyz123' 'self')とHTML(<script nonce="xyz123">...</script>)の両方に埋め込む。nonceが一致するスクリプトだけが実行され、nonceのないインラインスクリプトはブロックされる。これがXSS対策になる。補完策として、'strict-dynamic' を使うとnonce付きスクリプトが他のスクリプトを読み込めるようになる。トレードオフ:nonceをリクエストごとにテンプレートへ埋め込む必要があり、静的にはキャッシュできない。代替として、特定のインラインスクリプトの内容をハッシュで許可する方法もある。unsafe-inlineを使わない現代的なWebアプリの標準的な手法だ。