【WordPressセキュリティ対策】Author情報を見せないための設定

WordPress の Author情報について

WordPressの標準機能の1つとして、下記方法でAuthor(著者=”ユーザID” )情報を誰からでも確認できるような状態となっています。このままにしておくことは、セキュリティ上好ましくありません。

http://WordPressサイトのアドレス/?author=1  ★ /?author=任意の数字

Author情報が見られると何が問題なのか?

ユーザIDさえ知られてしまえば、Brute-force attacks (総当たり攻撃)などによって、比較的簡単に不正ログインされてしまいます。

大した記事も書いてないし、私には関係ない話なんて思わない方が良いです。不正にログインされてしまうことで、様々な不利益を被る可能性があります。

  • WordPressにログインできなくなったり
  • 記事にマルウェア埋め込まれ閲覧者に被害が出てしまったり
  • 不正なリンク埋め込まれてマルウェアサイトに誘導されたり
  • FTPとかで、ローカルPCとファイル送受信した際に変なファイルも一緒にダウンロードしちゃったり
  • 犯罪予告に利用されちゃったり

いずれにせよ良いことは起きないので、事前に対策しておきましょう。

対策方法① functions.php へ設定追加

軽くググった感じだと、”functions.php” に書く方法が一般的のようです。”functions.php” ファイル自体は、ローカルで編集したファイルを ftp 経由でアップロードするか。WordPressの管理画面から直接編集することが可能です。

下図は、WordPressの管理画面から直接編集する場合の方法です。

  1. 外観 → テーマの編集(左ペイン)を選択
  2. テーマのための関数(右上)で “functions.php” を選択
  3. ファイルの中身を編集
    ※個人的には一番下に設定を追記するのが分かりやすいと思います。
  4. “ファイルを更新” ボタンをクリック

設定内容

URLに “/?author=任意の数字” が入力された場合は、ホームディレクトリに飛ばす設定をしています。if 条件にマッチした場合は、wp_redirect( home_url(‘/’) ); が実行され、ホームディレクトリに飛ぶようにしています。

// Block WordPress author scans
if (!is_admin()) {
	// Default URL format
	if (preg_match('/author=([0-9]*)/i', $_SERVER['QUERY_STRING'])){
		wp_redirect( home_url('/') );
        	exit;
	}else{
		add_filter('redirect_canonical', 'permalink_check', 10, 2);
	}
}
function permalink_check($redirect, $request) {
	// Permalink URL format
	if (preg_match('/\?author=([0-9]*)(\/*)/i', $request)){
		wp_redirect( home_url('/') );
        	exit;
	} else{
		return $redirect;
	}
}

Tips::functions.php について
FFFTP や WinSCP などで直接ファイルを編集してアップロードする場合は、次のファイルパスからオリジナルファイルをダウンロードしてください。

/ドメイン名/WordPressのインストール先/wp-content/themes/利用テーマ/functions.php

対策方法②  .htaccessファイルへ設定追加

もう1つの対策方法として、.htaccess ファイルに設定を追加する方法もあります。WinSCP を利用する場合は、標準設定だと隠しファイルが見えないので注意してください。

Tips:WinSCPで隠しファイルを表示
オプション → 環境設定 → パネル → 一般 から設定を変更できます。

設定内容
  • .htaccess ファイルの置き場所
    /ドメイン名/.htaccess
    ※WordPressのインストール場所によって、若干異なるかもしれません。その場合は
    ファイルの置き場所を適当な箇所に変更してください。
  • 設定内容
    こちらも対策方法①とほぼ同様で、URLに /?author=任意の数字 が入力された場合は、ホームディレクトリに書き換える処理をしています。

    # Block User ID Phishing Requests
    <IfModule mod_rewrite.c>
    	RewriteCond %{QUERY_STRING} ^author=([0-9]*)
    	RewriteRule .* https://www.my-technote.com/? [L,R=302]
    </IfModule>

    Tips:[L, R=302]について
    R=302 は、リダイレクトコード:302を示しています。意味としては、メンテナンス等で一時的にサイトが移動中であることを示しています。詳しい内容についてGoogle等で検索していただければ、すぐに分かるかと思います。

補足

脆弱性やバグなどは、必ずどこかしらにはあります。本対策をしたからといって、完全完璧な対策とはなりませんが、セキュリティ的なリスクを下げるといった意味では有効です。

以上