セキュリティ観点で考えるWordPressのログインユーザー名

ヘッダ画像

WordPressのログインユーザー名は丸見え!?

知っていますか?
WordPressのログインユーザー名はだだ漏れだという事実を…

ダッシュボード乗っ取り防止のためのセキュリティ対策で必ずいわれるのが、ログインユーザー名を「adminではないものに変更しよう」です。
たしかにadminというユーザー名は変える必要があるでしょう。
しかし、実はデフォルトの状態ではadminかどうかに関わらず、さして労力をかけずにアカウントIDは分かってしまいます。

総当たり攻撃ともいわれるブルートフォースアタックから守らなければならないのは「ユーザー名」と「パスワード」のふたつですが、そのうちユーザー名はいともたやすく突破されてしまうのです。

その理由と対処方法について順を追って解説します。

WordPressではニックネームを必ず変更する

まず、基本的なところで管理者がコメント欄に入力を行うと、ほとんどのテーマで投稿者としてニックネームが表示されます。
テーマによっては記事にも投稿者名が表示されますね。

表示テーマ:Twenty Twelve

表示テーマ:Twenty Twelve

また、ブラウザではニックネームが表示されていなくてもソース内(body内HTMLタグなどのclass属性名)にニックネームが使われていることもあります。

このニックネームは管理画面の「ユーザー」→「プロフィール」で設定しますが、なんとデフォルトではニックネーム=ユーザー名なのです。

nickname

つまり、ニックネーム未定義の場合、ユーザー名を公表していることになります。
このことを認知していないユーザーが多く、WordPress構築サイトはニックネーム=ログインユーザー名のものが意外に多いです。
最低でも任意のニックネームを設定して、ブログの表示名にこのニックネームを選択しましょう。

投稿者アーカイブからユーザー名が分かる

WordPressでは投稿者アーカイブというものが作成されます。
ユーザー名がadminならば、example.com/author/adminでアクセスできます。
投稿者アーカイブへのリンクを作らなければ、閲覧者に知られることはないのではと思われますが、実はサイトURLに?author=ユーザーIDというパラメータを付けることでユーザー名の投稿者アーカイブにリダイレクトされます。

つまり・・・
example.com/?author=1でアクセスすれば
example.com/author/adminにリダイレクトされるということですね。

?author=1の数字はユーザーIDになるわけですが、一番はじめに作られるユーザーが1となり、アカウントがひとりの場合、通常は1です。
2つ目以降のユーザーはauthor=2となっていきますので、1から順番にアクセスしてみればよいのです。

ちなみにこのサイトでは一度初期アカウントでログイン後、新規で作成し直しているので、author=1ではありません。
(下記の方法にて投稿者アーカイブのアクセスを禁止しており、404でアクセスできません)

ランダムにブルートフォースアタックを仕掛ける場合、ひと工程手間が掛ることになるので、ユーザー名の変更がまったくの無意味ということではないとは思いますが、その気になれば、速攻で見破られてしまいます。

投稿者アーカイブのURLを変更する

「Edit Author Slug」というプラグインを使うことで投稿者アーカイブのURLを変更できます。

プラグインを追加して有効にすると前述の管理画面の「ユーザー」→「プロフィール」に下記のような設定が追加されます。

editauthorslug

Customの項目でauthor/の後ろのURLを任意に指定できます。
この例ではユーザー名adminに対して、下記のような投稿者アーカイブのURLです。
https://seous.info/author/D6zfpGN8yI7f7xRXH3n0

投稿者アーカイブにアクセスさせない

複数の投稿者で運営しているサイトであれば、投稿者アーカイブは有用な場合もあるかと思うのですが、個人ブログやホームページ運用など、管理者がひとりであれば、他のアーカイブページと内容が重複することとなります。
こういった場合はそもそも投稿者アーカイブそのものが不要でしょう。
下記をfunctions.phpに下記を追記することで404を返します。

<?php
add_filter( 'author_rewrite_rules', '__return_empty_array' );
function disable_author_archive() {
if( $_GET['author'] || preg_match('#/author/.+#', $_SERVER['REQUEST_URI']) ){
wp_redirect( home_url( '/404.php' ) );
exit;
}
}
add_action('init', 'disable_author_archive');
?>

その他にもユーザー名が晒されている

コメント機能にも危険が…

コメント機能を使っていると通常はコメントテンプレートであるcomment-template.phpにより、コメント欄が出力されます。
このテンプレートでは以下のように投稿者名のクラスが付与されます。

class=”comment byuser comment-author-xxxxxx ~”

しかも、ニックネームではなくログインユーザー名が!
この仕様はどうなんでしょう???

これはfuncions.phpでのリムーブ処理でcomment-authorの出力を止めてしまうのがよいでしょう。

<?php
function remove_comment_author_class( $classes ) {
foreach( $classes as $key => $class ) {
if(strstr($class, "comment-author-")) {
unset( $classes[$key] );
}
}
return $classes;
}
add_filter( 'comment_class' , 'remove_comment_author_class' );
?>

万が一のログインユーザー名漏洩に備える

WordPressでのユーザー名の漏洩についての対策を書きましたが、日々のチェックと不測の事態に備えバックアップは必須です。
そして、Web上でのホームページ運営のセキュリティ対策として最も効果が高いのは管理画面へのIP制限です。
ホワイトリスト方式であれば、指定環境以外からはダッシュボードにアクセスすることすらできないのです。
もちろん、FTPにも対策を行います。
これはWordPress以外の静的HTMLのホームページにおいても有効です。

「WordPressのダッシュボードをブルートフォースアタックから守る」

また、IP制限が難しくとも、レンタルサーバではXserverなどで見られるようなWordPressのダッシュボードへのログイン試行回数を制限するような機能もありますので、それらも合わせて活用するとよいでしょう。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です



関連記事

絶対に分かる!WordPressの子テーマ作成 WordPressでは子テーマという機能があります。既存のテーマを作成すれば、カスタマイズする際に変更したい部分だけを子...

WordPressのRSSフィードを完全にコントロールする WordPressではコンテンツの更新情報を知らせるために標準でRSSを出力します。その出力方法は...http://e...

「トップに戻る」ボタンでスマホでのユーザビリティアップ! ウェブサイト上でコンテンツを下にスクロールさせると「トップに戻る」ボタンが出現して、クリックするとビューンとページの初め...

オリジナルの403ページを表示しよう WordPressで構築したサイトのほとんどはページが見つからない場合の404ページ(page Not Found)が用...