本ページは、セキュリティヘッダー追加機能(「セキュリティとスパム対策」→「SSL通信」→「セキュリティヘッダーの追加」)に関する仕様と使い方の解説ページです。
セキュリティヘッダーについて知識のない方はこの機能を不用意に有効にしないでください
以下のコードで.htaccessへセキュリティヘッダーに関する情報を追加しています。
function haup_pagely_security_headers( $headers ) {
//$headers['X-Frame-Options'] = 'SAMEORIGIN';//古いブラウザ用なのでコメントアウト20250120
$headers['X-Content-Type-Options'] = 'nosniff';
$headers['X-XSS-Protection'] = '1;mode=block';
$headers['Referrer-Policy'] = 'no-referrer-when-downgrade';
//Content-Security-Policyをフィルターで変更可能にして追加
// デフォルトではすべてのドメインを許可
$default_policy = "frame-ancestors 'self' https://*";
// フィルターフックを使ってポリシーを変更できるようにする
$policy = apply_filters( 'haup_pagely_frame_ancestors_policy', $default_policy );
$headers['Content-Security-Policy'] = $policy;
$headers['Strict-Transport-Security'] = 'max-age=31536000;includeSubDomains; preload';
$headers['Cross-Origin-Resource-Policy'] = 'same-origin';
$headers['Cross-Origin-Opener-Policy'] = 'unsafe-none';
$headers['Cross-Origin-Embedder-Policy'] = 'unsafe-none';
$headers['Permissions-Policy'] = 'geolocation=(), midi=(),sync-xhr=(),accelerometer=(), gyroscope=(), magnetometer=(), payment=(), camera=(), microphone=(),usb=(),fullscreen=(self)';
return $headers;
}
/*** 一応SSLでなかったら発火しないようにする ***/
if (!empty($_SERVER['HTTPS'])) {
add_filter( 'wp_headers', 'haup_pagely_security_headers' );
}
一応必要最低限なオプションは有効化することで追加できるようになっています(各オプションについてはご自身でお調べください)。
有効化した標準の仕様では、外部のサイトでWordPressの標準リンクカードが正常に表示されるよう、「Content-Security-Policy」は自身のドメインと、SSL通信可能なドメインからの情報取得を許可することにしています。
この措置はバージョン5.4から追加したもので、それより前のバージョンでは基本的に自ドメイン以外のサイトでのリンクカード化はされないようになっています。以前のバージョンを使用している方は本機能そのものを無効にして、ご自身でセキュリティヘッダーの追加を行うようにしてください
ただしこれは必要十分な手段ではなく、カード化を許可するドメインを限定することでより強固なセキュリティが担保できます。
もしも自身で複数のドメインのサイトを運営していてそのサイト間のみカード化を許可したい場合や、その他許可したいドメインを含めて限定したい場合には以下のコードで許可範囲を限定することができます。
function haup_allow_csp_domain_filter($policy){
// 許可するドメインの配列
$allowed_domains = [
//ここに許可するドメインを追加
//例:'https://example.com',
];
// 配列を文字列に変換
$domains_string = implode(' ', $allowed_domains);
// ポリシーを更新
return "frame-ancestors 'self' $domains_string";
}
add_filter( 'haup_pagely_frame_ancestors_policy', 'haup_allow_csp_domain_filter' );
コメントを残す