2026年5月21日
2026年5月21日
WordPressのユーザー登録を無効にして不正アカウントを防ぐ方法
会員機能を使っていないのに、見覚えのない「購読者」アカウントが毎日のように増えている場合、WordPress の「だれでもユーザー登録ができるようにする」が有効になっているか、プラグイン側の登録機能が開いている可能性が高いです。この記事では、コアの設定でユーザー登録を止める手順、設定を止めても登録が続くときの確認ポイント、すでに作られた不正アカウントの整理、設定が勝手に戻らないようにする固定化の方法までを順に解説します。
なぜ不正アカウントが作られるのか
WordPress には標準でユーザー登録の仕組みがあり、設定が有効なら wp-login.php?action=register からユーザー名とメールアドレスだけでアカウントを作れます。スパム業者のボットはこの URL を機械的に探して回り、登録できるサイトを見つけると大量にアカウントを作ります。
作られたアカウントの多くは「購読者」で、それ自体に大きな権限はありません。しかし、次のような理由で放置は避けるべきです。
- ログインできるアカウントが増えるほど、権限昇格の脆弱性を持つプラグインがあった場合の被害につながりやすい
- プロフィール欄にスパムリンクが入れられ、著者ページなどで表示されることがある
- 登録通知メールが大量に送られ、サーバーの送信制限や迷惑メール判定に影響する
会員サイトや EC サイトでなければ、ユーザー登録は管理者が手動で追加する運用にして、公開の登録窓口は閉じておくのが基本です。
手順1:コアのユーザー登録を無効にする
管理画面の「設定」→「一般」を開き、「メンバーシップ」の「だれでもユーザー登録ができるようにする」のチェックを外して保存します。
同じ画面の「新規ユーザーのデフォルト権限グループ」も確認してください。ここは「購読者」が標準です。もし「管理者」や「編集者」になっていたら、サイトが改ざんされている疑いがあります。過去には、脆弱なプラグインを悪用して、このデフォルト権限を「管理者」に変え、同時に登録を有効にして管理者アカウントを作る攻撃が実際に確認されています。
WP-CLI が使える環境なら、次のコマンドで現在の値の確認と変更ができます。
# 現在の設定を確認(1 なら登録受付中)
wp option get users_can_register
wp option get default_role
# 登録を無効にし、デフォルト権限を購読者に戻す
wp option update users_can_register 0
wp option update default_role subscriber
無効化したあとに wp-login.php?action=register を開くと、登録フォームは表示されず、登録を受け付けていない旨のメッセージ付きのログイン画面に転送されます。ログアウトした状態(またはシークレットウィンドウ)で確認してください。
手順2:設定を止めても登録が続くときの確認
コアの設定を外したのにアカウントが増え続ける場合は、別の入口が開いています。よくあるのは次のケースです。
プラグインやテーマ独自の登録フォーム
WooCommerce、会員管理プラグイン、フォーラム系プラグインなどは、コアの設定とは別に独自の登録フォームを持っていることがあります。たとえば WooCommerce では、設定画面の「アカウントとプライバシー」タブで、マイアカウントページやチェックアウト時のアカウント作成を許可するかどうかを個別に設定します。コアの設定を外しても、こちらが有効なら登録は止まりません。
どこから登録されたかを調べるには、新しく作られたユーザーのプロフィールや、プラグインが付けるメタ情報(顧客情報の有無など)を見るのが手がかりになります。アクセスログで登録日時前後の POST リクエストの送信先を確認する方法も有効です。
マルチサイト
マルチサイトでは、各サイトの「設定」→「一般」ではなく、ネットワーク管理の「設定」にある登録の設定が使われます。ネットワーク全体で登録を受け付けない設定になっているかを確認してください。
既存アカウントの古いデータ
登録日時を見て、設定を変えたあとに作られたアカウントがないかを確認します。設定変更前に作られたアカウントが一覧に残っているだけ、ということもよくあります。
手順3:作られた不正アカウントを整理する
削除の前に、データベースのバックアップを取ってください。ユーザーを削除すると、そのユーザーが作成した投稿の扱いを決める必要があり、操作を誤ると記事が消えることがあります。
管理画面の「ユーザー」で権限グループを「購読者」に絞り込み、メールアドレスのドメイン、ユーザー名の規則性、投稿数が 0 であることなどを見て、不正アカウントを判断します。本物の読者や顧客が混ざっている可能性があるサイトでは、機械的にまとめて消さず、怪しい条件を決めてから対象を絞り込んでください。
WP-CLI では、次のように一覧を出してから個別に削除できます。
# 購読者の一覧を、登録日時つきで表示
wp user list --role=subscriber --fields=ID,user_login,user_email,user_registered
# 指定した ID のユーザーを削除(投稿があれば ID 1 のユーザーに引き継ぐ)
wp user delete 123 124 125 --reassign=1
--reassign を付けずに投稿を持つユーザーを削除すると、その投稿も削除されます。スパムアカウントは通常投稿を持ちませんが、念のため引き継ぎ先を指定しておくと安全です。
管理者や編集者の権限を持つ見覚えのないアカウントが見つかった場合は、単に削除するだけでは不十分です。不正侵入を前提に、パスワードの変更、プラグイン・テーマの更新、改ざんされたファイルの確認まで進めてください。
手順4:設定が勝手に戻らないよう固定する
設定画面のチェックは、管理者権限を持つ人や、脆弱性を突いた攻撃によって変更できてしまいます。登録機能を使う予定がないサイトでは、コードで値を固定しておくと安心です。
wp-content/mu-plugins/ フォルダ(なければ作成)に、次のようなファイルを置きます。mu-plugins に置いたファイルは管理画面から無効化できず、常に読み込まれます。
<?php
/**
* Plugin Name: Disable Public Registration
* Description: ユーザー登録の受付を常に無効にし、デフォルト権限を購読者に固定する。
*/
// 「だれでもユーザー登録ができるようにする」を常にオフとして扱う
add_filter( 'pre_option_users_can_register', '__return_zero' );
// 新規ユーザーのデフォルト権限を購読者に固定する
add_filter( 'pre_option_default_role', function () {
return 'subscriber';
} );
pre_option_{オプション名} フィルターは、データベースに保存された値より先に評価されるため、設定画面で値を変えても実際の動作には反映されなくなります。後で会員機能を始めるときは、このファイルを削除するのを忘れないようにしてください。
登録機能が必要なサイトの場合
会員制サイトなどで登録窓口を閉じられない場合は、無効化ではなく「誰でもすぐ登録できる」状態を避ける方向で対策します。
- 登録フォームに CAPTCHA(reCAPTCHA や Cloudflare Turnstile など)を入れる
- 管理者の承認後にアカウントを有効にする承認制にする
- 招待コードやメールの確認リンクを使い、本人確認できた人だけを登録させる
どの方法を使えるかは、使っている会員プラグインやフォームプラグインの機能によって変わります(2026年10月現在)。導入前に、プラグインの最終更新日と対応している WordPress のバージョンを確認しておくと安心です。
まとめ
- 会員機能を使わないなら、「設定」→「一般」の「だれでもユーザー登録ができるようにする」を外す
- 「新規ユーザーのデフォルト権限グループ」が「購読者」以外なら改ざんを疑う
- コアの設定を外しても登録が続く場合は、WooCommerce などプラグイン独自の登録機能やマルチサイトの設定を確認する
- 不正アカウントの削除はバックアップを取ってから。WP-CLI では
--reassignで投稿の引き継ぎ先を指定する - mu-plugins で
pre_option_フィルターを使えば、設定が勝手に戻るのを防げる