22:00よりサイトのメンテナンスを開始します×

エーデルハーツ

Custom WordPress Support & Development

WordPress 3分間フッキング:セキュリティを強化するremove_actionテクニック

WordPress 3分間フッキング:セキュリティとパフォーマンスを向上させるremove_actionテクニック

こんにちは!埼玉県川越市を拠点にWordPressの開発・カスタマイズサービスを提供しているWebエンジニアです。今回の「WordPress 3分間フッキング」では、サイトのセキュリティとパフォーマンスを向上させる強力なテクニック、remove_actionについて解説します。

特に「remove_action('wp_head', 'wp_generator')」を中心に、WordPressのヘッド部分をクリーンアップする方法と、その効果について詳しく見ていきましょう。

今回のフックコード

この一行のコードで、WordPressのバージョン情報を表示するメタタグを削除できます。小さな変更ですが、セキュリティ向上に大きく貢献します!

wp_generatorとは?その削除が重要な理由

WordPressのデフォルト設定では、サイトのHTMLの<head>部分に以下のようなメタタグが自動的に追加されています:

これはwp_generator関数によって生成されており、使用しているWordPressのバージョンを明示しています。一見便利そうに見えますが、実はセキュリティ上の大きな問題を含んでいます。

バージョン情報を公開することは、悪意ある攻撃者にとって「この特定のWordPressバージョンの既知の脆弱性」を狙う手がかりになってしまいます。

例えば、あるバージョンに脆弱性が発見された場合、攻撃者はバージョン情報を見て「このサイトは脆弱性のあるバージョンを使っている」と判断し、攻撃の標的にする可能性があります。

remove_actionの仕組みと基本構文

remove_actionは、WordPressのアクションフックから、すでに登録されている関数を削除するための関数です。これにより、WordPressの標準的な動作を変更・抑制することができます。

基本的な構文は次の通りです:

  • フック名:アクションフックの名前(例:wp_head
  • 関数名:削除したい関数の名前(例:wp_generator
  • 優先度:オプション。関数が複数登録されている場合の優先度

多くの場合、優先度は省略できますが、特定の状況では指定が必要な場合があります。この場合、元のadd_actionで設定されたのと同じ優先度を指定する必要があります。

WordPressヘッドをクリーンアップする主要なremove_action一覧

バージョン情報の削除以外にも、remove_actionを使ってWordPressサイトを最適化できる箇所はたくさんあります。それらを目的別に見ていきましょう。

remove_actionコード 効果 推奨度 注意点
remove_action('wp_head',
'wp_generator')
WordPressバージョン情報の非表示化 ★★★★★ ほぼすべてのサイトで推奨
remove_action('wp_head',
'rsd_link')
Really Simple Discovery(RSD)リンクの削除 ★★★★☆ XML-RPCを使用しない場合に推奨
remove_action('wp_head',
'wlwmanifest_link')
Windows Live Writer用リンクの削除 ★★★★☆ Windows Live Writerを使用しない場合に推奨
remove_action('wp_head',
'print_emoji_detection_script', 7)
絵文字変換スクリプトの削除 ★★★★☆ 絵文字を多用するサイトでは注意
remove_action('wp_print_styles',
'print_emoji_styles')
絵文字用CSSの削除 ★★★★☆ 絵文字を多用するサイトでは注意
remove_action('wp_head',
'wp_shortlink_wp_head')
短縮URLリンク情報の削除 ★★★★☆ 短縮URLを使用しない場合に推奨
remove_action('wp_head',
'adjacent_posts_rel_link_wp_head')
前後記事へのリンクタグ削除 ★★☆☆☆ SEOに影響する可能性あり
remove_action('wp_head',
'feed_links_extra', 3)
追加フィードリンクの削除 ★★★☆☆ フィードを使用する場合は注意
remove_action('wp_head',
'rest_output_link_wp_head')
REST APIリンクの削除 ★★☆☆☆ REST APIを使うテーマ・プラグインに影響
remove_action('rest_api_init',
'wp_oembed_register_route')
oEmbed REST APIルートの無効化 ★★☆☆☆ oEmbedを使うコンテンツに影響
remove_action('wp_head',
'wp_resource_hints', 2)
DNSプリフェッチヒントの削除 ★☆☆☆☆ パフォーマンスに悪影響の可能性

推奨度の見方:★5つが最も推奨度が高く、★1つが最も慎重に検討すべきものを表します。

WordPressヘッドクリーンアップの包括的な実装例

複数のremove_actionを組み合わせて、より包括的なヘッドクリーンアップを実現できます。以下に実装例を示します。

このコードをテーマのfunctions.php、または専用のプラグインに追加することで、WordPressのヘッドをクリーンアップし、セキュリティとパフォーマンスを向上させることができます。

セキュリティ向上のためのremove_action

1. WordPressバージョン情報の非表示化

前述のとおり、これはセキュリティ上最も重要な対策の一つです。バージョン情報を非表示にすることで、脆弱性を狙った攻撃を防ぎます。

2. XML-RPC関連リンクの削除

XML-RPCは外部アプリケーションからWordPressを操作するための仕組みですが、セキュリティ上の問題を引き起こす可能性もあります。この機能を使用していない場合は、関連リンクを削除することで攻撃対象となる可能性を減らせます。

XML-RPCを利用した「総当たり攻撃」が多発しています。実際に使用していない場合は、XML-RPC自体を無効化することも検討してください。

3. Windows Live Writer用リンクの削除

Windows Live Writerは既に廃止されたブログエディタですが、WordPressはまだこのツール用のマニフェストリンクを生成しています。使用していないツール関連のコードは削除することで、攻撃対象となる表面積を減らせます。

パフォーマンス向上のためのremove_action

1. 絵文字関連のコードを削除

WordPressは自動的に絵文字をサポートするためのスクリプトとスタイルを読み込みます。しかし、絵文字を使用しないサイトにはこれらの追加リソースは不要であり、パフォーマンスに悪影響を与える可能性があります。

速度テストツールでも、これらの絵文字スクリプトは「不要な JavaScript」として指摘されることがよくあります。削除することで読み込み速度の改善が期待できます。

2. その他のリンクを削除

短縮URL機能や追加のフィードリンクも、使用していない場合は不要なHTMLを生成します。これらを削除することで、HTMLのサイズを小さくし、ページ読み込み速度を改善できます。

注意が必要なremove_action

すべてのremove_actionが無条件に推奨できるわけではありません。特に注意が必要な例をいくつか見ていきましょう。

1. 前後の記事リンクの削除

このコードは前後の記事への関連付けを示すlinkタグを削除します。しかし、これによりGoogleなどの検索エンジンがコンテンツの関連性や順序を理解する助けとなる情報が失われる可能性があります。

2. REST API関連の削除

REST APIはモダンなWordPressテーマやプラグイン、そしてGutenbergエディタが使用する重要な機能です。これらを無効化すると、サイトの様々な機能に影響を与える可能性があります。

REST API関連のコードを削除する場合は、十分なテストを行い、サイトの機能に問題がないことを確認してください。

3. DNSプリフェッチヒントの削除

DNSプリフェッチは、外部リソースへのアクセスを高速化するための機能です。これを削除すると、サイトのパフォーマンスに悪影響を与える可能性があります。特に外部リソース(フォント、CDNなど)を多用するサイトでは注意が必要です。

実装方法と注意点

実装手順

  1. WordPressの管理画面にログイン
  2. 「外観」→「テーマエディター」を選択(または「外観」→「テーマファイルエディター」)
  3. 右側のファイル一覧から「functions.php」を選択
  4. functions.phpの最後に適切なremove_actionコードを追加
  5. 「ファイルを更新」ボタンをクリック

直接テーマファイルを編集する場合は必ず事前にバックアップを取っておきましょう。テーマの更新時にコードが上書きされる可能性があります。

より安全な実装方法として、子テーマを使用するか、専用の小さなプラグインを作成してremove_actionコードを管理することをおすすめします。

実装例(プラグイン形式)

このコードを「wp-3min-head-cleanup.php」などのファイル名で保存し、wp-content/pluginsディレクトリにアップロードすることで、独立したプラグインとして実装できます。

実際の効果を確認する方法

実装後、本当にバージョン情報などが削除されているか確認しましょう。

1. ソースコードの確認

  1. サイトを表示し、ブラウザで右クリック
  2. 「ページのソースを表示」を選択
  3. <head>セクションをチェックし、<meta name=”generator”>タグが削除されていることを確認

2. セキュリティスキャンツールの活用

WPScan(https://wpscan.org/)などのWordPressセキュリティスキャナーを使用して、バージョン情報が外部から検出できるかテストする方法もあります。

よくある質問(FAQ)

Q1: remove_actionでエラーが発生する場合は?

A1: エラーが発生する主な原因は、該当のアクションが追加される前に削除を試みていることです。remove_actionは必ずinitフックなど、元のアクションが追加された後のタイミングで実行するようにしてください。

Q2: 全てのremove_actionを実装しても安全ですか?

A2: サイトの用途や使用しているテーマ・プラグインによって異なります。段階的に実装し、各変更後にサイトの機能をテストすることをお勧めします。特にREST API関連の削除は慎重に行ってください。

Q3: 実装後、Gutenbergエディタが動作しなくなりました。なぜですか?

A3: REST APIに関連するremove_action(特にrest_output_link_wp_headrest_api_init関連)を実装すると、Gutenbergエディタが正常に動作しなくなる場合があります。これらのコードは削除するか、条件分岐で管理画面では実行されないようにしてください。

まとめ

今回は「remove_action('wp_head', 'wp_generator')」を中心に、WordPressのヘッド部分をクリーンアップして、セキュリティとパフォーマンスを向上させる方法を解説しました。

特にバージョン情報の削除は、WordPressサイトのセキュリティ向上に大きく貢献します。それに加えて、不要なコードの削除によるパフォーマンス向上も期待できます。

ただし、すべてのremove_actionが全てのサイトに適しているわけではありません。サイトの要件に合わせて取捨選択し、段階的に実装してテストすることをお勧めします。

私たちは埼玉県川越市を拠点に、WordPressの開発・カスタマイズサービスを提供しています。WordPressのセキュリティやパフォーマンス最適化についてお悩みがありましたら、ぜひWordPressトラブル対応・お悩み相談サービス(https://edel-hearts.com/wordpress-trouble-shooting/)をご利用ください。