ユーザのニックネーム設定は必須

新しくWPをセットアップしたり、ユーザを追加した際、とりあえずメールアドレス・ログイン名・パスワードは必須なのですが、その他の項目は手付かずでそのまま運用してしまう方も少なくないと思います。

しかしこれがなかなかセキュリティ上、危険な事態を招いてしまいます。

というのは、デフォルトでは「ブログ上の表示名」は「ユーザー名」に設定してあります。ということは、このユーザーが何か投稿した際、投稿にこの名前が表示され、ログイン名を公開していることになります。

このユーザー名を手がかりにしてサイトをアタックする手法は古典的ですが、今でも相当数の攻撃が常時行われています。ランダムにパスワードを入力しログインできるまで攻撃を繰り返す「ブルート・フォース・アタック」と呼ばれる手法です。

そこで、ユーザ作成時に必ずしなければいけないのが「ニックネーム」の設定と、「ブログ上の表示名」をニックネームに変更する操作です。

これで一安心と思いきや・・・

これでこのユーザーが何かを投稿しても、執筆者欄にはニックネームだけが表示され、ユーザー名を悟られる恐れがありません。

・・・と思いたいところですが、意外なところに落とし穴があります。

現在のWPにはREST APIという仕組みが内蔵されています。これは何かと言うと、サイトの投稿記事を中心とした様々な情報を外部から簡単にアクセスできるようにする仕組みです。そして情報には投稿者のユーザ情報も含まれます。

試しに、あなたのサイトのURLに

/wp-json/wp/v2/users

と追加してみてください

びっくりしましたか?

もしかしたら管理者のユーザーIDとログイン名が入っているかも知れません。上の例では、ニックネームを設定したに関わらず、2箇所にユーザー名が入っております。

標準的なjsonフォーマットですので、誰でも簡単にその部分を取り出すことが出来ます。もちろんプログラムを組んで自動化することも出来ます。

大変なセキュリティ・ホールだと思いますが、「投稿者データは公開情報である」というポリシーにで基づいているのでしょうか?ちなみにここにリストアップされるのは1ページでも投稿したことのあるユーザだけです。

しかし、ほとんどの場合、管理者自身が何らかの投稿をしているので、事は重大です。このように自らハッキング情報を晒しているような状態になっているサイトは非常に多いと思われます。

ユーザー情報をAPIから除外するには?

地味なプラグインですが、REST API Toolbox というものがあります。

プラグインの「新規追加」より検索してみてください。

このプラグインは、特定のエンドポイント(データの受け渡し窓口のようもの)を開け閉めする機能を持っています。

設定画面の中の’core’タブ内に’user’という項目があるのでチェックを入れてください。そして「変更を保存」をクリックします。

もし心配なら一番上の’All WordPress Core Endpoints’にチェックを入れてもいいかも知れません。

そうすると今度はユーザー情報の取得を試みても

これでユーザー情報は完全に隠蔽されました。

Theme My Login ユーザーは要注意

この件でもっとも危険にさらされているのは、Theme My Loginなどの会員プラグインを利用したサイトのユーザーや管理者かも知れません。

なぜなら、このようなプラグインにはメールアドレスでログイン出来る機能があり、その場合ユーザーネームがメールアドレスになっていたり、ニックネームがメールアドレスをベースに生成されている可能性が高いからです。

この場合、ユーザのメールアドレスをいとも簡単に収集する事も出来てしまい、さらに重大な事態に晒される事になります。

結論として

「必要がなければREST APIは無効化しておく方が良い」

これだけは肝に銘じておきましょう!