Home Arrow Icon Knowledge base Arrow Icon Global Arrow Icon Spatie/Laravel-CSPパッケージは、インラインスクリプトとスタイルの動的ノンセスをどのように処理しますか


Spatie/Laravel-CSPパッケージは、インラインスクリプトとスタイルの動的ノンセスをどのように処理しますか


SPATIE/LARAVEL-CSPパッケージは、HTTP要求ごとに一意のNonCE値を生成し、コンテンツセキュリティポリシー(CSP)ヘッダーと関連するHTML要素に自動的に注入することにより、インラインスクリプトとスタイルの動的ノンセを処理します。これがそれがどのように機能するかについての詳細な説明です:

NonCe Generation

- パッケージは、非ジェゲンレーターインターフェイスを使用して、各リクエストに対してNonCe Stringを動的に生成します。
- デフォルトでは、一意のランダム文字列を返す独自のNonCEジェネレータークラスを実装できます。たとえば、Asset Compilationの間に「Vite :: cspnonce()」を使用するために「laravelvitenoncegenerator」のようなクラスを作成することにより、Laravel ViteのNonceシステムと統合できます。
- パッケージの「csp.php」構成ファイルの「nonce_generator」キーで、nonceジェネレータークラスを指定します。

###ポリシーにNONCESを適用します

-CSPポリシークラス(通常、 `Spatie \ csp \ Policies \ basic`を拡張します)では、` addnoncefordirective(directive :: script) `および` addNonceFordiRective(directive :: style)などのメソッドを使用します。
-これにより、生成されたNonCEがこれらのディレクティブのCSPヘッダーに含まれていることを保証し、一致するNonCe属性を実行するインラインスクリプトとスタイルを実行できます。

###ミドルウェアとヘッダーインジェクション

- パッケージは、HTTPカーネルまたは特定のルートで登録するミドルウェア( `Spatie \ csp \ addcspheaders`)を提供します。
-このミドルウェアは、リクエストのNONCEを生成し、NONCEディレクティブを含むCSPポリシーを適用し、適切なCSPヘッダーをHTTP応答に追加します。
-NONCE値はリクエスト内で一貫しているため、「@nonce」などのブレードディレクティブを使用したり、 `csp_nonce()`のようなヘルパー関数を使用して、nonce属性をインライン ``または ``タグに出力します。

Laravel Viteとの統合

- Laravel Viteを使用する場合、パッケージは `Vite :: Cspnonce()`を介してViteの組み込みのNonce Generationを活用できます。
-ViteからNonceを返すカスタムNonCeジェネレータークラスを作成して、CSPヘッダーで使用されているNonCEがVite注入スクリプトとスタイルに適用されるNonCEと一致するようにします。
- これにより、NonCeの不一致によって引き起こされるCSP違反が回避され、Viteを搭載したLaravelアプリの安全なインラインスクリプト/スタイルが可能になります。

###追加機能

- パッケージは、HTTPヘッダーを制御できない場合、CSPポリシーをメタタグとして(@cspmetatag`ブレードディレクティブを介して)レンダリングすることもサポートしています。
- リソースをブロックせずにCSPポリシーをテストするためのレポートのみモードをサポートします。
- さまざまな環境(開発と生産)のポリシーをカスタマイズできます。

###実用的なメモ

-Blade `@nonce`ディレクティブまたは` csp_nonce() `helperを使用して、nonceがインラインスクリプト/スタイルに出力されることを確認する必要があります。それ以外の場合、ブラウザはそれらをブロックします。
-Chromeのようなブラウザは、動的に挿入されたスクリプトタグからNonCe属性を削除する可能性があるため、NonCeを慎重に使用してテスト動作を使用します。
-NONCEは、要求ごとに生成されたランダムな文字列であり、正しいNONCEを持つ人だけが実行できるようにすることにより、インラインスクリプト/スタイルをより安全にします。

要約すると、Spatie/Laravel-CSPは、構成可能なNonCeジェネレーターを介して要求ごとにNonCEを動的に生成し、スクリプトとスタイルのCSPヘッダーにこのNonCEを含め、インライン要素にNonCe属性を出力するためのブレードディレクティブとヘルパーを提供します。この統合は、特にLaravel Viteとの統合により、インラインスクリプトとスタイルが安全でないインラインを使用せずにCSPによって安全に許可され、機能を維持しながらアプリケーションセキュリティを強化します[1] [2] [3] [4] [6]。

引用:
[1] https://github.com/spatie/laravel-csp
[2] https://laravel.io/forum/laravel-and-content-security-policy
[3] https://laravel-news.com/package/spatie-laravel-csp
[4] https://stackoverflow.com/questions/75106343/nonce-is-always-empt-when-when-using-spatie-laravel-with-laravel-and-vite-js
[5] https://github.com/spatie/laravel-csp/discussions/96
[6] https://stackoverflow.com/questions/77459507/how-to-add-csp-nonce-nonce-inline-inline-and-script-injected-by-vue-in-a-laravel-and
[7] https://www.stackhawk.com/blog/laravel-content-security-policy-guide-what-it-is-how-to-enable-it/
[8] https://stackoverflow.com/questions/78864184/enable-nonce-to-laravelof-official-packages
[9] https://developer.mozilla.org/en-us/docs/web/http/headers/content-security-policy/script-src