コンテンツセキュリティポリシー (CSP) は、クライアントブラウザに対して、どの場所および/またはどのタイプの資源の読み込みを許可するかを指示するためのW3C仕様です。この仕様では、「ディレクティブ」を使用して、ターゲットリソースの種類の読み込み動作を定義します。ディレクティブは、HTTPレスポンスヘッダーまたはHTML<meta>タグを使用して指定できます。
luscaはApacheライセンスの下でオープンソースです。
まず
# In your sails app
npm install lusca --save --save-exact
次に、config/http.jsにcspを追加します。
// ...
csp: require('lusca').csp({
policy: {
'default-src': '*'
}
}),
// ...
order: [
// ...
'csp',
// ...
]
これがどのように機能するかを理解するために、2017年現在のサポートされているCSPディレクティブのスナップショットを示します。
| ディレクティブ | |
|---|---|
| default-src | リソースタイプ専用のディレクティブが定義されていない場合のすべてのリソースタイプの読み込みポリシー(フォールバック) |
| script-src | 保護されたリソースが実行できるスクリプトを定義します。 |
| object-src | 保護されたリソースがプラグインを読み込む場所を定義します。 |
| style-src | ユーザーが保護されたリソースに適用するスタイル(CSS)を定義します。 |
| img-src | 保護されたリソースが画像を読み込む場所を定義します。 |
| media-src | 保護されたリソースがビデオとオーディオを読み込む場所を定義します。 |
| frame-src | 保護されたリソースがフレームを埋め込む場所を定義します。 |
| font-src | 保護されたリソースがフォントを読み込む場所を定義します。 |
| connect-src | スクリプトインターフェースを使用して保護されたリソースが読み込むことができるURIを定義します。 |
| form-action | HTMLフォーム要素のアクションとして使用できるURIを定義します。 |
| sandbox | ユーザーエージェントが保護されたリソースに適用するHTMLサンドボックスポリシーを指定します。 |
| script-nonce | スクリプト要素に指定されたnonceの存在を要求することで、スクリプトの実行を定義します。 |
| plugin-types | 埋め込むことができるリソースの種類を制限することで、保護されたリソースによって呼び出すことができるプラグインのセットを定義します。 |
| reflected-xss | 反映型クロスサイトスクリプティング攻撃をフィルタリングまたはブロックするために使用されるヒューリスティックを有効または無効にするようにユーザーエージェントに指示します。これは、非標準のX-XSS-Protectionヘッダーの効果と同等です。 |
| report-uri | ポリシー違反に関するレポートをユーザーエージェントが送信するURIを指定します。 |
詳細については、W3C CSP仕様を参照してください。
さまざまなブラウザで、さまざまなCSPレスポンスヘッダーがサポートされています。たとえば、Content-Security-PolicyはW3C標準ですが、Chrome、Firefox、IEのさまざまなバージョンでは、X-Content-Security-PolicyまたはX-WebKit-CSPを使用します。ブラウザのサポートに関する最新情報については、OWaspを参照してください。