[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\RegisterController
のvalidator
メソッドのpassword
にpwned
ルールを追加します。
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'],