ハマログ

株式会社イーツー・インフォの社員ブログ

ApacheでContent Security Policy(CSP)を設定する

先日、脆弱性検査ツールで以下のレポートが出力されました。

Content-Security-Policyの欠落

対策したときに最初よくわからず時間がかかったので、まとめます。

CSPの概要

ブラウザに対してサーバのポリシーを表明するための仕組みです。セキュリティ対策を目的としており、スクリプトや画像の実行可能範囲をしていすることができます。
たとえば、動作しているアプリケーションに脆弱性があり、XSSの外部スクリプトを目的としたスクリプトコードが埋め込まれた際に、実行を抑制することができます。

各ブラウザのサポート情報は、以下のサイトで確認することができます。
Content Security Policy (CSP) Quick Reference Guide

また、以下のサイトでブラウザの対応状況テストを実施することができます。
Content Security Policy Browser Test

設定方法

Apacheの設定ファイルに、

Header set Content-Security-Policy “設定”

を記載します

例:すべてのソースは同じドメイン(same origin)からのみ呼び出しが可能とし、外部スクリプトとしてアナリティクスの呼び出しを許可する。

<Directory "/var/www/laravel-sample/public">
    Header always set Content-Security-Policy "default-src 'self'; script-src 'self' www.google-analytics.com"
    AllowOverride All
    Options FollowSymLinks
</Directory>

キーワードはシングルクォーテーションで囲む必要がありますが、ドメイン指定の場合はシングルクォーテーションで囲まない。また、ドメイン指定にはワイルドカードとしてアスタリスク(*)が利用可能。

<Directory "/var/www/laravel-sample/public">
    Header always set Content-Security-Policy "default-src 'self'; script-src 'self' *.google-analytics.com"
    AllowOverride All
    Options FollowSymLinks
</Directory>

data:タグによる画像呼び出しと、ソースコード内のスクリプト実行を許可(unsafe-inline)する

<Directory "/var/www/laravel-sample/public">
    Header always set Content-Security-Policy "default-src 'self'; script-src 'self' 'unsafe-inline'; img-src 'self' data:;"
    AllowOverride All
    Options FollowSymLinks
</Directory>

すべてのソースからの画像ファイル表示を許可するために、アスタリスクを記述。(ただし、この場合data:は読み込めない※ブラウザ依存?)

<Directory "/var/www/laravel-sample/public">
    Header always set Content-Security-Policy "img-src *;"
    AllowOverride All
    Options FollowSymLinks
</Directory>

JSのevalを許可

<Directory "/var/www/laravel-sample/public">
    Header always set Content-Security-Policy "default-src 'self'; script-src 'self' 'unsafe-inline' 'unsafe-eval'"
    AllowOverride All
    Options FollowSymLinks
</Directory>

プロトコルで制御

<Directory "/var/www/laravel-sample/public">
    Header always set Content-Security-Policy "default-src 'self'; script-src 'self' https://*.google.com"
    AllowOverride All
    Options FollowSymLinks
</Directory>

設定→DeveloperToolで呼び出しエラーの確認→設定
を繰り返し、最適な設定を確認しましょう。また、ブラウザごとにサポート範囲が違うので、設定後は複数のブラウザで確認しましょう。

参考文献

CSP のポリシーディレクティブ – MDN

Content Security Policy (CSP) Quick Reference Guide

ApacheApache2Apache2.2Apache2.4Content Security PolicyCSPhttpdXSSセキュリティ

  kaneko tomo   2016年12月10日


関連記事

AWSのメール送信緩和申請はRemoval of E-mail sending limitじゃダメ

AWSのEC2では、デフォルトで25番ポートからのトラフィック(要はメール送信)…

デプロイ作業にCapistranoを試してみる

リーダーかねこがブログかけというので再登板です。Shinです。 今やっている案件…

STIMULUSでちょっとリッチなUI

フロントエンド(JavaScript)の開発の方向性については「これ」というデフ…


← 前の投稿

次の投稿 →