ワードプレスのupgrade.phpとinstall.phpがワードプレスのバージョンを漏洩する問題とその対処方法について解説いたします。

ワードプレスのバージョン漏洩問題

ワードプレスのはその本体のバージョンをサイトの方々に埋め込み、バージョンを漏洩させますが、ワードプレスに脆弱性が発見された場合このバージョン情報をもとにハッキングをされてしまう可能性があるため、セキュリティー上はワードプレスのバージョンが外部からはわからないようにした方が安全です。

ワードプレスは、メタジェネレータというヘッダー情報、スタイルやスクリプトに?var=というクエリでバージョン情報を付与、またupgrade.phpとinstall.phpでのバージョン情報の漏洩をします。

メタジェネレータのヘッダー情報、スタイルやスクリプトに?var=というクエリでのバージョン情報を付与は下記のコードをテーマのFunctions.phpに記載すると防ぐことができます。

/*verのクエリを消す*/
add_filter( 'style_loader_src', 'security_remove_wp_ver_css_js', 10, 2);
add_filter( 'script_loader_src', 'security_remove_wp_ver_css_js', 10, 2);

function security_remove_wp_ver_css_js( $src ) {
    if ( strpos( $src, 'ver=' . get_bloginfo( 'version' ) ) )
        $src = remove_query_arg( 'ver', $src ); 
    return $src;
}

/*メタジェネレータをヘッダーに出力しない*/
remove_action( 'wp_head', 'wp_generator' );
remove_action( 'opml_head', 'the_generator' );

upgrade.phpとinstall.phpでのバージョン情報の漏洩

また昨今では、WPSCAN等のワードプレスの脆弱性を調べる(逆に言えばハッキングの下調べも可能な)ツールを使うと、upgrade.phpとinstall.php の2ファイルでもワードプレスのバージョンを自動で調査します。

例えば下記のようなURLにアクセスいただくとそのソースコードから、ワードプレスのバージョンが漏洩しているのが分かります。

https://ワードプレスのURL/アドミンフォルダ/install.php
https://ワードプレスのURL/アドミンフォルダ/upgrade.php

ソースコードの例

このファイルはそれぞれワードプレスのフックの処理外から呼び出される為、テーマのfunctions.phpに対策のコードを記載しても防げないことからかなり厄介です。

※この問題は2024年10月末から11月初旬にリリース予定の【無料】ワードプレス:マルウェアスキャン&セキュリティープラグイン [マルウェア・ウィルス検出と駆除] の次期バージョンで簡単に回避できる機能を追加予定です。よろしければご利用ください。

upgrade.phpとinstall.phpでのバージョン情報の漏洩をHTACCESSから防ぐ

upgrade.phpとinstall.phpでのバージョン情報の漏洩はワードプレスのプログラミングコードからは防げないため、HTACESSファイルにアクセス拒否の設定を書き込んで防御します。

※HTACESSファイルはワードプレスのインストールディレクトリにある、サーバーの設定ファイルです

install.phpはワードプレスのインストール後は使用されないため、アクセスを禁止します。(HTACCESSファイルの上部に追記)

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule ^(.*)wp-admin/install\.php$ - [R=404,L,NC]
</IfModule>

upgrade.php はワードプレスを例えばFTPで手動で上書きでアップデートした場合に、このファイルにログイン時に自動で移動してデータベースをアップデートする為に使用されることがあります。この為、単純にアクセスを防いでしまうと、ログインができなくなってしまう可能性があります。
この為、非ログイン時のみにアクセスを防ぐようにします。(HTACCESSファイルの上部に追記)

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_URI} ^.*wp-admin/upgrade\.php$ [NC]
RewriteCond %{HTTP_COOKIE} !^.*wordpress_logged_in.*$ [NC]
RewriteRule ^(.*)wp-admin/upgrade\.php$ - [R=404,L,NC]
</IfModule>

※%{HTTP_COOKIE} !^.*wordpress_logged_in.*$ [NC] の行でログイン固有のクッキーがない場合にのみアクセスを防ぐという意味になります。

WordPress ワードプレスサイトのマルウェア駆除・セキュリティー対策のご依頼ご相談はWPドクターまでお気軽にお送りください