[Laravel] Pwnedを使って安全なパスワードを利用する

サービスを利用する際にアカウントに設定する「パスワード」はとても重要です。他のサービスと同じパスワードの使い回しや、簡単なパスワードを利用したことによるアカウントの乗っ取り(不正アクセス)の危険があります。

Pwned Passwordsは過去に漏洩した膨大なデータを収集して、利用するパスワードが過去に何らかの形で漏洩したパスワードかどうかを確認できます。

このサービスをLaravelのユーザー登録時のValidationとして使ってみましょう。

パッケージのインストール

valorin/pwned-validatorをインストールします。

$ composer require valorin/pwned-validator

Laravelの5.4未満を利用している場合は下記をconfig/app.phpへ追記します。

'providers' => [

    Valorin\Pwned\ServiceProvider::class,

],

バリデーションの設定

Laravelの認証システムを利用できるようにしておきましょう。

$ php artisan make:auth

 App\Http\Controllers\Auth\RegisterControllervalidatorメソッドのpasswordpwnedルールを追加します。

return Validator::make($data, [
    'name' => 'required|string|max:255',
    'email' => 'required|string|email|max:255|unique:users',
    'password' => 'required|string|min:6|pwned|confirmed',
]);

/registerのURLへアクセスして、パスワード情報に12345678といった簡易なものを入力してみましょう。バリデーションに引っかかります。

※ 作成時点では12345678のパスワードは過去に2,680,521回漏洩しています。

バリデーションの際のメッセージを変更する場合はresources/lang/{言語}/validation.phpに追加しましょう。


また、pwnedのデフォルトの漏洩回数は1回です。

この値を変更する場合は下記のように記述します。

// 100回以上漏洩しているパスワードをチェック
'password' => 'required|string|min:6|pwned:100|confirmed',

Laravelの5.5で追加されたRuleクラスでの利用も可能です。

// 150回以上漏洩しているパスワードをチェック
'password' => ['required', 'string', 'min:6', new \Valorin\Pwned\Pwned(150), 'confirmed'],
© Xzxzyzyz