Skip to content

WordPressのuser_nicenameの仕組みと変更方法

Published: at 00:00

WordPressのログイン履歴に不審なアクセスがあり、ユーザー情報が外部から取得できないか確認した。すると、投稿のREST APIレスポンスにuser_nicenameという形で投稿者のスラッグが含まれていた。

Table of contents

Open Table of contents

user_loginとuser_nicenameの違い

項目用途
user_loginログイン時に入力するユーザー名
user_nicename投稿者URLなどに使用するスラッグ
nicknameプロフィールのニックネーム(ユーザーメタ)
display_nameサイト上の表示名

WordPressは通常、新規ユーザーの作成時にuser_loginをもとにuser_nicenameを生成する。 そのため両者が一致していることがある。管理画面からニックネームや表示名を変えても、user_nicenameは変わらない。

REST APIで確認する

外部の未認証環境から実行する。

curl -sS "https://example.com/wp-json/wp/v2/posts?_embed&per_page=1" \
  | jq '.[0]._embedded.author[] | {id, name, slug, link}'

出力例:

{
  "id": 1,
  "name": "編集担当",
  "slug": "admin",
  "link": "https://example.com/author/admin/"
}

ここでのslugはuser_nicenameに対応する。user_loginと同じ値ならログイン名を推測できる。ただし、数値のユーザーIDや投稿者スラッグは本来公開され得る情報であり、表示されたこと自体が認証情報の漏洩を意味するわけではない。

投稿者URLからも推測できる場合がある。

curl -sSI "https://example.com/?author=1"

WP-CLIでuser_nicenameを変更する

まず現在の値を確認する。

wp user list --fields=ID,user_login,user_nicename,display_name

IDが1のユーザーの場合:

wp user update 1 --user_nicename=site-editor

変更後は、例えば次のようになる。

user_login     = secret-admin
user_nicename  = site-editor
display_name   = 編集担当

user_loginは変わらないため、従来のユーザー名でログインできる。user_nicenameを変更すると投稿者アーカイブURLが変わるので、公開中のページやリンクがあればリダイレクトも検討する。

新規ユーザーをWP-CLIで作る場合は、作成時に--user_nicenameを指定できる。WordPress標準の「新規ユーザーを追加」画面には通常この入力欄はない。

セキュリティ上の位置づけ

user_nicenameを変えることは、ログイン名の露出を減らす補助的な対策である。攻撃者がすでにログイン名を知っている場合、その知識を取り消すことはできない。強いパスワード、ログイン試行回数制限、2要素認証も併用したい。

参考