ノンホー! どうもこんにちは、きにゃです。
WordPressでブログを始めたんだけどセキュリティに不安が・・
そんなあなたに役立つ情報です。
WordPressをインストールする際、ユーザー名をデフォルトのadminから変更してくださいというのは大分周知されているのでそうしている方がほとんどだと思います。
また、ニックネームとブログ上の表示名設定をユーザー名とは異なるものに設定することもほとんどの人がやっていると思います。※もしadminのままだったり、この辺の設定をやっていない人は、すぐに変更したほうが良いですよ。
ただ、adminから別のユーザー名へ変更してニックネームとブログ上の表示名を設定しただけでは、まだ安心とは言えません。実は、ユーザー名が見えるリスクが結構あるんです。
ユーザー名が分かると、WordPressの管理画面へのログインで必要な情報であるユーザー名とパスワードのうちの1つがバレてしまうことになるのでセキュリティ的に弱くなるわけです。
今回は、ユーザー名がバレないようにするための3つの対策を紹介していきます。
投稿者アーカイブからユーザー名が見えるのを防止する
自分のブログURLの後ろに続けて「/?author=1」と入力すると、どんなページが表示されていますか?
もし、画面が遷移して下記の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のVer4.7からREST APIの機能が本格的に実装されてデフォルトで有効になっているため、何も対策をしていない状態だとJSON形式のデータがユーザ名を含んだ形で見えてしまう可能性があります。
上記は、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のコメント欄で、管理者が例えば以下のようにコメントを返したとします。
そのページのHTMLの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の管理画面へアクセスされてしまうと、せっかく書いた記事を消去されてしまったり内容を書き換えられてしまう恐れがあります。
また、マルウェア等の有害な内容を含むページを送信されたり、そのようなページへリダイレクトするようにされたり、他のサーバーへの攻撃の踏み台(中継サーバー)にされたり、第三者へ悪影響を及ぼしてしまうような心配もあります。
今できる対策を行ってこうしたリスクを少しでも低減しておきましょう。
コメント