ワードプレスのCSPの設定を管理画面から除外する方法について解説いたします。

CSP(コンテンツセキュリティーポリシー)でワードプレスの管理画面が崩れる、動作不全になる場合の対処方法

CSP(コンテンツセキュリティーポリシー)は、ウェブサイトのJAVASCRIPTやCSSなどの外部スクリプトの読み込み方法をブラウザーに指定して、サイトにアクセスしたユーザーのブラウザーに不正なスクリプトが読み込まれるのを未然に防いだり、クロスサイトスクリプティングを防ぐための仕組みです。

ただ、厳しめの設定にしますと、ワードプレスの管理画面のレイアウトが崩れたり機能が一部使えなくなるなどの動作不全がよく起こります。しかし、CSPの設定を甘くしてしまうと今度はセキュリティーが低下してしまいます。

この為、ワードプレスの管理画面とサイトの表示部分は分けてCSP設定を行う形がサイトに訪ねて来たユーザーには高セキュリティーになり、また、管理画面の不具合も起こりにくくなります。

サイトの表示部分にのみCSP設定を適応し、管理画面は除外する

1 add_actionでCSPを出力している場合

例えば下記のようなコードでCSP設定を出力している場合

add_action('send_headers', function () {
    header(
        "Content-Security-Policy: default-src 'self';"
    );
});

ワードプレスの管理画面の場合は除外するIF文を記載するとサイトの表示部分にだけCSP設定を適応できます。

↓修正例

add_action('send_headers', function () {
    if (is_admin()) {
        return;//ワードプレスの管理画面の場合は何もせず戻る
    }
    header(
        "Content-Security-Policy: default-src 'self';"
    );
});

2 htaccessでCSPを出力している場合

htaccessを使用している場合は、SetEnvIfを使用して管理画面のCSP適応を除外します

<IfModule mod_setenvif.c>
SetEnvIf Request_URI "wp-admin" no_csp
</IfModule>
<IfModule mod_headers.c>
Header set Content-Security-Policy "default-src 'self'" env=!no_csp
</IfModule>

2行目でもしURLにwp-adminを含む場合はno_cspという環境変数をApacheに認識させます。
次に最終行でCSP設定にenv=!no_csp を追加し、環境変数がno_cspの場合でない場合のみCSP設定をヘッダーに出力されるようにします。

※SetEnvIfはXサーバーやSakuraは効くようですが、サーバーによっては効かない場合があるかもしれません。この場合はadd_actionでCSP設定を行って管理画面を除外する方法を採用される方が良いかもしれません。ただ、add_action法しくはキャッシュプラグインと併用することで正しく実行されない場合があるようです。この点ご注意いただけましたら幸いです。

上記のような管理画面を除外したCSP設定は当社開発のセキュリティープラグインで、簡単に指定いただくことが可能です。
よろしければご利用ください。

【無料】ワードプレス:マルウェアスキャン&セキュリティープラグイン [マルウェア・ウィルス検出と駆除]

WordPress ワードプレスのCSP設定を含む、セキュリティー対策を代行いたします。お気軽にWPドクターまでご相談・ご依頼お送りください