1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

株式会社シンプルウェイAdvent Calendar 2023

Day 13

WordPressでCSSやJavaScriptにつくバージョン情報を差し替える

Last updated at Posted at 2023-12-12

WordPressで構築しているサイトをセキュリティ診断したところ、リスクレベルはないもののバージョン情報を隠蔽することを推奨されました。

非表示にするもの

functions.phpに記述することでWordPressのバージョンを非表示にすることができます。

metaタグのgenerarator

remove_action('wp_head', 'wp_generator');

RSSのgenerarator

function remove_rss_version() {
	return '';
}
add_filter('the_generator', 'remove_rss_version');

そのほか、wp-links-opml.phpにアクセスするとバージョン情報が表示されるので、このファイルは削除やアクセス制限などをするといいかもしれません。

CSSやJavaScript等に付与されるバージョン情報

WordPressではCSSやJavaScriptの読み込む時にバージョン情報が自動で付与されます。

<link rel='stylesheet' id='wp-block-library-css' href='https://example.com/wp-includes/css/dist/block-library/style.min.css?ver=6.4.1' type='text/css' media='all' />

非表示にするには

function remove_version_scripts_styles($src) {
    if (strpos($src, 'ver=')) {
        $src = remove_query_arg('ver', $src);
    }
    return $src;
}
add_filter('style_loader_src', 'remove_version_scripts_styles', 9999);
add_filter('script_loader_src', 'remove_version_scripts_styles', 9999);

ただ、CSSやJSに付与されているバージョン情報はキャッシュ対策にもなっていると思うので、非表示でいいのか?という疑問もあります。

バージョン情報を何かに差し替える

バージョン情報 6.4.1 部分をこれを元に何かに差し替えてみれば、キャッシュ対策にもなるのではないかと思いました。

例えばchr関数を使って数値を英字にする

function changeNumberToAlphabet($text)
{
    if (is_numeric($text)) {
        $text = (int) $text;
        return chr($text + 97); // 97を足して小文字の英字にする
    } else {
        return chr(ord($text));
    }
}
function remove_version_scripts_styles($src)
{
    if (strpos($src, 'ver=')) {
        // バージョン情報の取得
        $parameter = parse_url($src)['query'];
        parse_str($parameter, $queries);
        $version_str = $queries['ver'];
        $version_str = str_replace('.', '', $version_str); // ドットの削除
        $version_arr = str_split($version_str);

        // バージョン情報の数字を英数字にする
        $version_str = '';
        foreach ($version_arr as $text) {
            $version_str .= changeNumberToAlphabet($text);
        }

        // verのパラメータを削除
        $src = remove_query_arg('ver', $src);

        // 新たにverのパラメータを追加
        $src = add_query_arg('ver', $version_str, $src);
    }
    return $src;
}
add_filter('style_loader_src', 'remove_version_scripts_styles', 9999);
add_filter('script_loader_src', 'remove_version_scripts_styles', 9999);

参考記事

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?