<?php if ( !defined( 'ABSPATH' ) ) exit;//PHPの宣言と直接アクセスの拒否

/* https://support.pagely.com/hc/en-us/articles/360043987431-Adding-Security-Headers-to-WordPress-Without-3rd-Party-Plugins */
/* https://otogeworks.com/blog/http-security-headers-likened-to-wordpress/ */
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';
	$headers['Content-Security-Policy'] = "frame-ancestors 'self'";
	$headers['Strict-Transport-Security'] = 'max-age=31536000;includeSubDomains; preload';
	$headers['Cross-Origin-Resource-Policy'] = 'same-origin';
	$headers['Cross-Origin-Opener-Policy'] = 'unsafe-none';

	//Content-Security-Policyをフィルターで変更可能にして追加 20250120
	// デフォルトではすべてのドメインを許可
	$default_policy = "frame-ancestors 'self' https://*";
    
	// フィルターフックを使ってポリシーを変更できるようにする
	$policy = apply_filters( 'haup_pagely_frame_ancestors_policy', $default_policy );
	$headers['Content-Security-Policy'] = $policy;

	$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' );
}

/* フィルターフックのコード例
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' );
*/