【セキュリティ】WordPressで投稿者名を非表示にする方法

WORDPRESS

こんにちは、ふく(@hukublog | Twitterです。

突然ですが、WordPressのユーザー名をインターネットに晒していませんか??

WordPressのブログで使われてる「投稿者名」。

WordPressインストール直後の状態では、この「投稿者名」はログイン時に使用する「ユーザー名」そのものですよね。

そして、何も対策をしていないと、WordPressサイトのいくつかの場所に、誰でも見られる状態で公開されています。

これはちょっとセキュリティ的にマズイですよね。

本ページでは、WordPressで「ユーザー名」を晒してしまうのを防ぐためのセキュリティ対策を紹介いたします。※FTP使います。

ニックネームの変更

WordPressユーザーアカウントの「ニックネーム」ですが、ユーザー作成した直後は「ユーザー名」が「ニックネーム」になっており、「ブログ上の表示名」としてブログに表示されています。

この「ブログ上の表示名」はサイト内の色々な箇所で使われていますので「ユーザー名」以外の名称に変更しておきます。

この作業はWordPress管理画面から変更できます。

以下のページでキャプチャ付で解説してますので、よかったらご参考ください。

表示名を変更しておく|【FTP不要】2019年版WordPressセキュリティ対策(初心者向け)

投稿者アーカイブページのリダイレクト

投稿者アーカイブページは、そのページURLにユーザー名が含まれてしまいます。

もし投稿者アーカイブページが必要ないようでしたら、トップページなどへリダイレクトしておくとよいです。

この作業はプラグインで対応できます。以下のページで解説してますのでご参考ください。

投稿者アーカイブが表示されないようにする|【FTP不要】2019年版WordPressセキュリティ対策(初心者向け)

functions.phpでの対策

上記で紹介しているようにプラグインでも対処できますが、本ページの対策をすべて実施する場合、どのみちfunctions.phpをいじります。

であれば、この「投稿者アーカイブページのリダイレクト」もプラグインを使わずに対策してしまってもよいと思います。

利用しているテーマのfunctions.phpに以下を記述します。

function author_archive_redirect() {
   if( is_author() ) {
       wp_redirect( home_url());
       exit;
   }
}
add_action( 'template_redirect', 'author_archive_redirect' );

REST APIの無効化

REST APIとは

REST APIとは、簡単にいうと、

プログラムを使ってWebサイトにアクセスして、Webサイトの色々な情報を取得したり、編集したりするための機能

です。

WordPressの場合は記事情報などが取得できるのですが、その他にユーザー名リストも簡単に取得できてしまいます。

自分のWordPressサイトでREST APIが有効になっているかのチェック方法

自分のブログでREST APIが有効になっているかどうかは、以下のURLにアクセスすると分かります。

https://ブログサイトのURL/wp-json/

何やらたくさん文字が表示されたら、「REST APIが有効になっている」ということ。

もし「ユーザー名を隠すための対処」を意図的に実施していない場合、ユーザー名が晒されている可能性が高いです。

REST APIを無効にする方法

REST APIを使う必要がない場合、「完全に無効化する」のが好ましいのです。

ただそうすると、知らないうちに実はREST APIが使われていた場合(プラグインなど)、それらが機能しなくなりますので、部分的にREST APIを使えるようにしつつ、それ以外を無効化する、という対策が必要です。

これはひと手間かかります。

なので、今回は「ユーザー名を隠す部分だけ対処する」方法をご紹介します。

利用しているテーマのfunctions.phpに以下を記述します。

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');

コメントのcssクラスの除去

ブログでコメントを有効にしていて、そのコメントにブログ管理者として返信していたら、危険信号です。

WordPressのコメント欄にはCSSのクラスが付与されているのですが、そのクラス名に「ユーザー名」が含まれてしまっているからです。

そこで、そのクラス名を使用しないように修正します。

利用しているテーマのfunctions.phpに以下を記述します。

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');

テーマファイルのチェック

WordPressには様々なテーマファイルがありますが、中にはユーザー名がhtmlソースに埋め込まれてしまうテーマもあります。

有名どころでは

・Cocoon
・Luxeritas

あたり。

どちらも私の知る限り、1箇所、修正が必要です。

Cocoon

対象ファイル:cocoon-master/tmp/footer-meta.php
対象箇所:26行目

footer-meta.phpの26行目を以下のように修正して、子テーマのフォルダ(cocoon-child-master/tmp/)にアップロードします。

【変更前】

<a href="<?php echo $url; ?>" class="author-link">

【変更後】

<a href="<?php echo esc_url( get_home_url() ); ?>" class="author-link">

Luxeritas

対象ファイル:luxeritas/head-band.php
対象箇所:81行目

head-band.phpの81行目を以下のように修正して、子テーマのフォルダ(luxech/)にアップロードします。

【変更前】

		$author = get_the_author_meta( 'user_nicename', $auth[0]->ID );

【変更後】

		$author = get_the_author_meta( 'nickname', $auth[0]->ID );

【まとめ】functions.phpに追記するもの

このページでfunctions.phpに追記しているものをまとめました。

紹介した対策(テーマファイル以外)を全て設定するのであれば、以下の内容をテーマフォルダにあるfunctions.phpに追記しちゃってください。

functions.phpはテーマファイル毎に異なりますので、テーマを変更した場合は再度追記する必要があります。

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

//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');

//コメント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');

作業が不安・・・な場合

もし自分のブログがどんな状態か知りたい方はTwitterでDMいただけたらカンタンチェックいたします。(無料)

@hukublog | Twitterまでお気軽にどうぞ。

また、必要であればその後の作業代行もいたします。(有料:3000円)
作業のご依頼はココナラでもお受けしています。

ココナラの出品サービスページはこちら

ユーザー名がバレたとしてもすぐに不正ログインされるわけではありませんが、その危険が高まることは間違いないので、できるだけ早めに対策しておきましょう。

コメント