WordPressでユーザーが脆弱なパスワードを設定できないようにする

2020-04-15
2020-04-17

ユーザーが管理画面のプロフィール画面からパスワードを変更する時、アルファベット1文字のような脆弱なパスワードを入力すると、「脆弱なパスワードの使用を確認」というチェックボックスが出てきて、これにチェックを入れるとどんなパスワードでも設定できてしまう。

これをやめさせたい。
ついでにパスワードリセットの際も脆弱なパスワードを設定できなくしたい。

そのためにはfuncitons.phpに以下のように書く。

「脆弱なパスワードの使用を確認」のチェックボックスを隠す

まず「脆弱なパスワードの使用を確認」というチェックボックスが出てこないようする。
これにチェックがない場合はちゃんとした強度のパスワードを設定しなければ更新ボタンが押せないのでひとまず目的は達成できる。

function hide_pw_weak() {
  echo "<script> jQuery(document).ready(function() { jQuery('.pw-weak').remove(); }); </script>";
}
add_action('admin_head','hide_pw_weak');
add_action('login_head','hide_pw_weak');

PHPでフォームの入力をチェックする

フォーム改ざんなどで強引にPOSTされた場合には突破されてしまうので、PHP側で入力のチェックを行う。

function block_pw_weak(&$errors, &$user) {
  if (!empty($_POST['pw_weak'])) {
    $errors->add('block_weak_password', __('<strong>Error</strong>: Weak password is not accepted.'), array('form-field' => 'pass1'));      
  }
}

function block_edit_user_pw_weak(&$errors, $update, &$user) {
  block_pw_week($errors, $user);
}
add_action('user_profile_update_errors', 'block_edit_user_pw_weak', 10, 3);

function block_password_reset_pw_weak(&$errors, &$user) {
  block_pw_week($errors, $user);
}
add_action('validate_password_reset', 'block_password_reset_pw_weak', 10, 2);

なおこちらだけやればいい説もあるが、そうすると「脆弱なパスワードの使用を確認」のチェックボックスがユーザーの期待を裏切るどうさになるので、やはり「脆弱なパスワードの使用を確認」のチェックボックスは出ないようにしておいた方がいい。

もっとちゃんとやりたければblock_pw_weakの中で脆弱なパスワードを正規表現などで弾くこともできる。
入力されたパスワードは$_POST['pass1']に入っているので、その値をチェックすれば良い。

まあ実際ちゃんとやった方がいいだろう。あとで更新する・・・と思ったけどまあいいや。

参考

How to remove Confirm Use of Weak Password checkbox for users ? - WordPress.org

Profile

フルスタック気味のフリーランスプログラマー。

どちらかと言うと得意はインフラ構築とサーバーサイドプログラミングですが、フロントエンドもぼちぼちやっています。

最近の興味範囲はWordPress、AWS、サーバーレス、UIデザイン。

愛車はセロー。カメラはペンタックス。旅好きです。横浜在住。