開発記録(第11回)。AI に日本株の売買判断をさせる投資システム investTool を個人で開発しています。全体像は目次記事にまとめています。

- 表示名をハンドルネームにしていても、ログイン名は3つの経路から外に見えていました
- 変えたはずのログイン URL も、管理画面の転送から分かる状態でした
- 設定が効いているかを自分の PC から確かめると、許可された回線として扱われ、判定を誤ることがありました
やりたかったこと
このブログ用に新しく WordPress を立ち上げ、固定ページを公開した直後に、外から見える情報を確かめました。
ログイン名は、パスワードと並んでログインに必要な情報の片方です。本名から作ったログイン名なら、個人の情報が見えていることにもなります。そのため、外から見えないようにしておく必要がありました。
見えていた経路と塞ぎ方

1. REST API のユーザー一覧
- 症状
/wp-json/wp/v2/usersのslugに、ログイン名がそのまま出ていた- 原因
- WordPress は、ユーザーを作ったときのログイン名から著者のスラッグを作る。表示名を変えてもスラッグは変わらない
- 対処
- 投稿用のユーザーを別に作って作成者を移し、ログインしていない人にはユーザー一覧を返さないようにする
REST API のユーザー一覧には、公開済みの記事や固定ページを持つユーザーが出ます。固定ページを公開した時点で、管理者が一覧に出ていました。
まず、ハンドルネームのログイン名で投稿用のユーザー(編集者)を作り、固定ページの作成者を移しました。ところが、管理者は記事もページも持たなくなったのに、一覧から消えませんでした。理由までは突き止めていません。
原因を追うより確実な方法として、ログインしていない人にはユーザー一覧そのものを返さないようにしました。
この対策はテーマの側に入れています。テーマを変えると消えるため、移さないとログイン名が再び見えるようになります。
2. 番号から著者ページへの転送
- 症状
/?author=1を開くと、/author/<スラッグ>/に転送され、URL にログイン名が出た- 原因
- WordPress は、ユーザーの番号から著者ページへ転送する
- 対処
- セキュリティのプラグインで、番号から著者ページへの転送を止める設定を有効にする
有効にすると、/?author=1 はトップページへ転送されるようになりました。ただし、この設定は REST API のユーザー一覧(1つ目の経路)は塞ぎません。
3. テーマのプロフィール欄
- 症状
- トップページのサイドバーのプロフィール欄に、管理者の表示名と著者ページへのリンクが出た
- 原因
- テーマ(Cocoon)のプロフィール欄は、記事以外のページでは既定のユーザー(管理者)を表示する
- 対処
- プロフィール欄を、テーマの部品ではなく自前の HTML に置き換える
1と2を塞いだ後、デザインを整えたトップページを撮影して見返したときに見つかりました。記事や固定ページではそのページの作成者が出ますが、トップページやカテゴリの一覧では管理者が出ていました。
REST API を塞いでも、テーマが HTML に直接書き出す部分からは見えます。API を調べるだけでなく、実際の画面を見て確かめる必要がありました。
4. 管理画面から、ログイン URL が分かる
- 症状
- ログイン URL を変えたのに、未ログインで
/wp-admin/を開くと、新しいログイン URL へ転送された - 原因
- WordPress は、未ログインで管理画面を開くとログイン画面へ転送する。転送先が新しい URL になるだけだった
- 対処
- 管理画面からログイン画面へ転送しない設定を合わせて有効にする
ログイン URL を変える設定で、標準のログイン画面は開けなくなりました。しかし、管理画面を開けば新しい URL が分かるのでは、隠した意味がありません。ログイン URL の変更だけでは足りず、組み合わせる設定がありました。
確かめ方の落とし穴
- 症状
- 管理画面へのアクセスを制限する設定を有効にしても、確認すると
/wp-admin/がまだ転送された - 原因
- この設定は最近ログインした IP アドレスからのアクセスを許可する。確認した PC は、管理画面にログインしていた回線と同じだった
- 対処
- スマートフォンの Wi-Fi を切り、モバイル回線から確かめる
確認は、管理画面にログインしていたのと同じ回線の PC から行っていました。そのため、許可された側として扱われ、効いていないように見えました。スマートフォンのモバイル回線から開くと、404 になっていました。
IP アドレスで許可する仕組みは、許可されていない回線から確かめないと、効いているかどうか判定できません。自分の PC から見た結果だけで「効いていない」「効いている」と決めないようにしています。
実際にどう使っているか
記事を自動で投稿するようになると、すべての記事に著者のリンクが付きます。立ち上げの時点で塞いでおいたことで、記事が増えても管理者のログイン名が出ることはありません。投稿用のユーザーを編集者の権限で分けたことは、前回書いた API の認証情報の安全にもつながっています。
ログイン名は1か所を塞いでも、別の経路から見えました。API、転送、テーマが書き出す HTML と、見える場所ごとに確かめる必要がありました。
この記事の内容に近い書籍
※ Amazon のアソシエイトリンクを含みます。
- 『体系的に学ぶ 安全なWebアプリケーションの作り方 第2版』(徳丸浩、Kindle版)
Web アプリケーションの脆弱性と対策の本です。この記事の、ログイン名が外から見えていた話と近い内容です
前回:Python から WordPress に下書きを自動投稿する|画像だけ WAF に 403 で弾かれた
次回:WordPress の表示でつまずいた5点|リンクの変換、日本語の太字、共有用の画像、テーマの部品の流用
当サイトは情報提供を目的としており、投資助言を行うものではありません。掲載している売買記録は仮想売買(ペーパートレード)であり、実際の取引の結果ではありません。投資判断はご自身の責任で行ってください。詳しくは免責事項をご覧ください。

