PR

WordPressのセキュリティアップ!ユーザー名を隠す3つの対策

WordPressのセキュリティアップブログ
記事内に広告が含まれています。
きにゃ
きにゃ

ノンホー! どうもこんにちは、きにゃです。

WordPressでブログを始めたんだけどセキュリティに不安が・・

そんなあなたに役立つ情報です。

WordPressをインストールする際、ユーザー名をデフォルトのadminから変更してくださいというのは大分周知されているのでそうしている方がほとんどだと思います。

また、ニックネームとブログ上の表示名設定をユーザー名とは異なるものに設定することもほとんどの人がやっていると思います。※もしadminのままだったり、この辺の設定をやっていない人は、すぐに変更したほうが良いですよ。

ただ、adminから別のユーザー名へ変更してニックネームとブログ上の表示名を設定しただけでは、まだ安心とは言えません。実は、ユーザー名が見えるリスクが結構あるんです。

ユーザー名が分かると、WordPressの管理画面へのログインで必要な情報であるユーザー名とパスワードのうちの1つがバレてしまうことになるのでセキュリティ的に弱くなるわけです。

今回は、ユーザー名がバレないようにするための3つの対策を紹介していきます。

本記事の内容
  • 投稿者アーカーイブのユーザー名の非表示化
  • REST APIのユーザー名の非表示化
  • コメントのCSSクラスのユーザー名の非表示化

本記事に記載の内容を実施される際は必ずバックアップを取ってから行うようにしてください。

投稿者アーカイブからユーザー名が見えるのを防止する

自分のブログURLの後ろに続けて「/?author=1」と入力すると、どんなページが表示されていますか?

WordPressでURLの後ろに/?author=1を追加
サイトURL/?author=1でアクセスして確認

もし、画面が遷移して下記のURLのようなページが表示されたら要注意です。

WordPressでユーザー名が表示される
URLの末尾にユーザ名が表示されている

投稿者アーカイブの一覧が表示され、URLの末尾にWordPressの管理画面へアクセスするためのログインユーザー名が表示されています。

ユーザー名が表示されない場合でも、念のため、「/?author=1」の1の数字の部分を2→3→4→・・・と変化させて確認してみてください。

それでユーザー名が表示されなければ、以下の対策は不要です。

投稿者アーカイブからユーザー名が見えるのを防止するための対策

対策を行うためには、子テーマのfunctions.phpに以下のコードを追加します。

//投稿者アーカイブ非表示
function author_archive_redirect() {
   if( is_author() ) {
       wp_redirect( home_url());
       exit;
   }
}
add_action( 'template_redirect', 'author_archive_redirect' );

この対策では、トップページへリダイレクトするようにすることで、ユーザー名が表示されるのを防止しています。

REST APIからユーザー名が見えるのを防止する

自分のブログURLの後ろに続けて「/wp-json/wp/v2/users」と入力すると、どんなページが表示されていますか?

WordPressでURLの後ろに/wp-json/wp/v2/usersを追加
サイトURL/wp-json/wp/v2/usersでアクセスして確認

WordPressのVer4.7からREST APIの機能が本格的に実装されてデフォルトで有効になっているため、何も対策をしていない状態だとJSON形式のデータがユーザ名を含んだ形で見えてしまう可能性があります。

WordPressのREST APIでユーザー名が表示される
データ中にユーザ名が含まれている ※chromeの拡張機能JSONviewを使って表示

上記は、chromeの拡張機能JSONviewを使って表示した例ですが、データ中にWordPressの管理画面へアクセスするためのログインユーザー名が表示される状態になっています。

REST APIからユーザー名が見えるのを防止するための対策

対策を行うためには、子テーマのfunctions.phpに以下のコードを追加します。

//REST APIのユーザー無効化
function remove_rest_api_users( $endpoints ) {
	if ( isset( $endpoints['/wp/v2/users'] ) ) {
		unset( $endpoints['/wp/v2/users'] );
	}
	if ( isset( $endpoints['/wp/v2/users/(?P[\d]+)'] ) ) {
		unset( $endpoints['/wp/v2/users/(?P[\d]+)'] );
	}
	return $endpoints;
}
add_filter( 'rest_endpoints', 'remove_rest_api_users');

この対策では、ユーザー名を取得される恐れのあるREST APIの特定のエンドポイントを無効化することで、ユーザー名が表示されるのを防止しています。

コメントのCSSクラス名からユーザー名が見えるのを防止する

WordPressのコメント欄で、管理者が例えば以下のようにコメントを返したとします。

WordPressのコメント
WordPressのコメント欄で管理者がコメントをした状態

そのページのHTMLのCSSをchromeのデベロッパーツールで覗いてみるとクラス名にユーザー名が含まれてしまっています。

WordPressのコメント欄のCSSクラス名にユーザー名が表示される
CSSクラス名にユーザー名が含まれている ※chromeのデベロッパーツールを使って表示

「comment-author-xxxxxx」のxxxxxxの部分です。ニックネームやブログ上の表示名設定を行っていても、xxxxxx部分はユーザー名となってしまうようです。

コメントのCSSクラス名からユーザー名が見えるのを防止するための対策

対策を行うためには、子テーマのfunctions.phpに以下のコードを追加します。

//コメントCSSクラスの除去
function remove_comments_class( $classes ) {
	foreach ( $classes as $key => $class ) {
		if ( strstr( $class, 'comment-author-' ) ) {
			unset( $classes[$key] );
		}
	}
	return $classes;
}
add_filter( 'comment_class', 'remove_comments_class');

この対策では、CSSクラス名「comment-author-xxxxxx」を出力しないようにすることで、ユーザー名が表示されるのを防止しています。

まとめ

WordPressの管理画面へアクセスするためのログインユーザー名がバレてしまうと、パスワード総当たり攻撃等に対して脆弱な状態になってしまいます。

万一不正にWordPressの管理画面へアクセスされてしまうと、せっかく書いた記事を消去されてしまったり内容を書き換えられてしまう恐れがあります。

また、マルウェア等の有害な内容を含むページを送信されたり、そのようなページへリダイレクトするようにされたり、他のサーバーへの攻撃の踏み台(中継サーバー)にされたり、第三者へ悪影響を及ぼしてしまうような心配もあります。

今できる対策を行ってこうしたリスクを少しでも低減しておきましょう。

コメント

タイトルとURLをコピーしました