2026年5月22日
2026年5月22日
WordPressのパスワードポリシーを設定する方法|最小文字数をコードかプラグインで強制する
WordPressでユーザーに一定以上の強さのパスワードを使わせたい場合の設定方法を説明します。WordPressの標準機能でできることとできないことを確認したうえで、コードで最小文字数などを強制する方法と、プラグインを使う方法を紹介します。内容は2026年10月時点のWordPressを前提にしています。
WordPress標準でできること
WordPressのプロフィール画面やパスワードリセット画面には、パスワード強度メーターがあります。入力中のパスワードを「非常に脆弱」「脆弱」「普通」「強力」で表示し、弱い場合は「脆弱なパスワードの使用を確認」のチェックボックスが表示されます。
ただし、このチェックを入れれば弱いパスワードでも保存できます。標準の機能には、最小文字数や使う文字の種類を強制する設定はありません。WP-CLIの標準コマンドにも、パスワードのルールを設定するコマンドはありません。ルールを強制するには、コードを追加するかプラグインを使います。
ルールを決める
ルールを厳しくしすぎると、パスワードの使い回しやメモ書きが増えることがあります。米国NISTのデジタル認証のガイドライン(SP 800-63B)は、文字種の組み合わせの強制や定期的な変更の強制ではなく、十分な長さと、漏えいが知られているパスワードを拒否することを重視しています。
この記事のコード例では、次のルールにします。
- 12文字以上
- ユーザー名を含まない
漏えい済みのパスワードを拒否する方法は、WordPressのHIBP(Have I Been Pwned)APIとパスワード連携を参照してください。
コードで最小文字数を強制する
パスワードを設定する画面ごとに、確認に使えるフックが異なります。
| 画面 | フック |
|---|---|
| プロフィール(自分の編集)、ユーザーの編集、ユーザーの新規追加 | user_profile_update_errors |
| ログイン画面からのパスワードリセット | validate_password_reset |
次のコードを wp-content/mu-plugins/password-policy.php として保存します(mu-plugins フォルダがなければ作ります)。mu-plugins に置いたファイルは自動で読み込まれ、管理画面から無効化できません。テーマの functions.php に書くと、テーマを変えたときにルールが外れるため、mu-plugin にしています。
<?php
/*
* Plugin Name: Password policy
* Description: パスワードの最小文字数などを強制する
*/
/**
* ルールに合わない点をメッセージの配列で返す(問題がなければ空の配列)
*/
function my_password_policy_messages( $password, $user_login = '' ) {
$messages = array();
if ( mb_strlen( $password ) < 12 ) {
$messages[] = 'パスワードは12文字以上にしてください。';
}
if ( '' !== $user_login && false !== mb_stripos( $password, $user_login ) ) {
$messages[] = 'パスワードにユーザー名を含めないでください。';
}
// 文字種も必須にする場合の例(英字と数字の両方)
// if ( ! preg_match( '/[A-Za-z]/', $password ) || ! preg_match( '/[0-9]/', $password ) ) {
// $messages[] = 'パスワードには英字と数字の両方を含めてください。';
// }
return $messages;
}
// プロフィール・ユーザーの編集・ユーザーの新規追加
add_action( 'user_profile_update_errors', function ( $errors, $update, $user ) {
// パスワードを変更しない更新では何もしない
if ( empty( $user->user_pass ) ) {
return;
}
$login = '';
if ( ! empty( $user->user_login ) ) {
$login = $user->user_login;
} elseif ( ! empty( $user->ID ) ) {
$existing = get_userdata( $user->ID );
$login = $existing ? $existing->user_login : '';
}
foreach ( my_password_policy_messages( wp_unslash( $user->user_pass ), $login ) as $i => $message ) {
$errors->add( 'my_password_policy_' . $i, $message );
}
}, 10, 3 );
// ログイン画面からのパスワードリセット
add_action( 'validate_password_reset', function ( $errors, $user ) {
if ( is_wp_error( $user ) || empty( $_POST['pass1'] ) ) {
return;
}
$password = wp_unslash( $_POST['pass1'] );
foreach ( my_password_policy_messages( $password, $user->user_login ) as $i => $message ) {
$errors->add( 'my_password_policy_' . $i, $message );
}
}, 10, 2 );
$errors にエラーを追加すると、パスワードは保存されず、画面にメッセージが表示されます。強度メーターの「脆弱なパスワードの使用を確認」にチェックを入れても、このルールに合わないパスワードは保存されません。
動作を確認する
- 管理者以外のテスト用ユーザーでログインし、「ユーザー」→「プロフィール」で「新しいパスワードを設定」を押し、11文字以下のパスワードを入れて「プロフィールを更新」を押す
- エラーが表示され、パスワードが変わっていないことを確認する(ログアウトして、元のパスワードでログインできるか)
- ログイン画面の「パスワードをお忘れですか ?」からリセットし、短いパスワードで同じようにエラーになることを確認する
画面の表記はWordPressのバージョンによって変わることがあります。
このコードの対象にならない経路
次の方法でパスワードを設定した場合、上のフックは実行されないため、ルールは適用されません。
- WP-CLI(
wp user create、wp user update --user_pass=...) - プラグインやテーマが独自に用意した会員登録・パスワード変更のフォーム(WooCommerceの「マイアカウント」など)
- 自作のコードから
wp_set_password()やwp_update_user()を直接呼ぶ処理 - データベースを直接書き換える方法
独自のフォームを使っている場合は、そのプラグインが用意しているフックで同じ確認を追加するか、そのフォームに対応したパスワードポリシーのプラグインを使います。アプリケーションパスワードは、WordPressが自動で生成する長いランダムな文字列のため、このルールの対象ではありません。
プラグインを使う場合
コードを書かずに設定したい場合は、パスワードポリシーのプラグインを使います。例えば「Melapress Login Security」は、無料版で最小文字数、大文字・小文字・数字・記号の必須化、有効期限、過去に使ったパスワードの再利用の禁止を設定できます(2026年10月時点のWordPress.orgのプラグインページの説明による)。
プラグインを選ぶときは、次の点を確認してください。
- 最終更新日と、対応しているWordPressのバージョン
- 自分のサイトで使っているフォーム(WooCommerceなど)にもルールが適用されるか
- 既存のユーザーに対して、次回ログイン時にパスワードの変更を求められるか
- 有効期限を設定する場合、利用者の負担に見合うか(上のNISTのガイドラインの考え方も参考に)
パスワード以外にあわせて行う対策
パスワードのルールだけでは、使い回されたパスワードが漏えいした場合などは防げません。次の対策も検討してください。
- 管理者と編集者に二要素認証を設定する
- ログイン試行の回数を制限する
- 管理者権限を持つユーザーを必要な人だけにする
まとめ
- WordPress標準の強度メーターは警告だけで、弱いパスワードの保存は止めない
user_profile_update_errors(プロフィール・ユーザーの編集・新規追加)とvalidate_password_reset(パスワードリセット)でルールを強制できる- WP-CLIや独自フォーム、
wp_set_password()を直接呼ぶ処理には適用されない - ルールは長さと漏えい済みパスワードの拒否を中心にし、二要素認証と組み合わせる
関連記事: