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 にエラーを追加すると、パスワードは保存されず、画面にメッセージが表示されます。強度メーターの「脆弱なパスワードの使用を確認」にチェックを入れても、このルールに合わないパスワードは保存されません。

動作を確認する

  1. 管理者以外のテスト用ユーザーでログインし、「ユーザー」→「プロフィール」で「新しいパスワードを設定」を押し、11文字以下のパスワードを入れて「プロフィールを更新」を押す
  2. エラーが表示され、パスワードが変わっていないことを確認する(ログアウトして、元のパスワードでログインできるか)
  3. ログイン画面の「パスワードをお忘れですか ?」からリセットし、短いパスワードで同じようにエラーになることを確認する

画面の表記は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() を直接呼ぶ処理には適用されない
  • ルールは長さと漏えい済みパスワードの拒否を中心にし、二要素認証と組み合わせる

関連記事:

お気軽にご相談ください

お見積りへ お問い合わせへ
▲