iframe埋め込みを禁止してクリックジャッキング攻撃を防ぐ

WordPress 6.4.3
広告WordPress・PHP を学べる本

Amazonのアソシエイトとして、WordPress functions.phpは適格販売により収入を得ています。

概要説明

iframe,embed,objectタグからの埋め込みを禁止させたい時のカスタマイズ。埋め込んだコンテンツを自コンテンツのように表示させ、ボタンなどは任意の内容を実行させる行為を防ぎやすくなります。DENY・'none' にすると、管理画面のカスタマイザーのプレビューなど、WordPress が自分のページを iframe で開く所まで止まります。自分のサイト(同じドメイン)からの埋め込みだけを許す SAMEORIGIN・frame-ancestors 'self' をおすすめします(WordPress 本体もカスタマイザーでこの値を使っています)。

.htaccessでiframe制御する場合

.htaccess
<IfModule mod_headers.c>
    # 自分のサイト(同じドメイン)からの iframe だけ許可する
    Header set X-Frame-Options SAMEORIGIN
    Header set Content-Security-Policy "frame-ancestors 'self'"
</IfModule>

functions.phpでiframe制御する場合

functions.php
/*----------------------------------------------------
 iframe埋め込みの制御(自分のサイトの iframe だけ許可する)
----------------------------------------------------*/
if ( !function_exists( 'deny_iframe_http_headers' ) ){
    function deny_iframe_http_headers() {
        header( 'X-Frame-Options: SAMEORIGIN' );                      // 自サイトのみ許可
        header( "Content-Security-Policy: frame-ancestors 'self'" ); // 今のブラウザはこちらを見る
    }
    add_action( 'send_headers', 'deny_iframe_http_headers' );
}

自分のサイトでも iframe をまったく使わないなら、DENY・'none' にもできますが、そうするとカスタマイザーのプレビューが動かなくなります。ほかのプラグインなどですでに Content-Security-Policy を出している場合は、別の行で上書きせず、その中に frame-ancestors 'self' を足してください。.htaccess の Header set は PHP の header() より後に効くので、両方に書いたときは .htaccess の値になります。

WordPress Developer Resources

SiteBeacon(サイトビーコン)

サイトが止まったら、すぐに気づける。

ホームページを 5 分ごとにチェックして、止まったとき・エラーが出たとき・SSL やドメインの期限が近いときに、メールでお知らせします。2 サイトまでは、ずっと無料で使えます。

SiteBeacon を見る サイトを直す相談をする

監視で気づいたあとの直す作業も、同じ担当がお受けします。