Пакет Laravel Zxcvbn — це правило валідації, яке оцінює надійність пароля, використовуючи PHP-версію JS-пакету dropbox/zxcvbn від Dropbox. Він також враховує введені користувачем дані для визначення оцінки вгадування пароля:
// У ваших правилах валідації
use Illuminate\Validation\Rules\Password;
use Ziming\LaravelZxcvbn\Rules\ZxcvbnRule;
$request->validate([
'name' => ['required'],
'email' => ['required', 'email'],
'password' => [
'required',
'confirmed',
'min:8',
new ZxcvbnRule([
request('email'),
request('name'),
]),
],
]);
// Приклади використання zxcvbn-php
$weak = $zxcvbn->passwordStrength('password', $userData); // 0 - надзвичайно легкий для вгадування
$strong = $zxcvbn->passwordStrength('correct horse battery staple'); // 4 - дуже важкий для вгадування
Ви можете задати конфігураційне значення ZXCVBN_MIN_SCORE
, щоб визначити, коли валідація має провалитися, згідно зі шкалою, що надається пакетом zxcvbn-php. За замовчуванням воно дорівнює 3
, але ви можете налаштувати його відповідно до своїх потреб:
0
вказує, що пароль дуже легко вгадати (до 10^3 спроб); слова з словника, такі як 'password' або 'mother', отримують оцінку 01
все ще дуже вгадуваний (менше 10^6 спроб); додавання одного символа до словникового слова може дати 12
дещо вгадуваний (менше 10^8 спроб), забезпечує певний захист від невгамовних онлайн-атак3
безпечно невгадуваний (менше 10^10 спроб), надає помірний захист від сценаріїв повільного хешування офлайн4
дуже невгадуваний (спроби більше або дорівнюють 10^10) і забезпечує надійний захист від офлайн-атак з повільним хешуванням💻 Почати роботу з цим пакетом можна на GitHub: ziming/laravel-zxcvbn.
Важливо пам'ятати, що Laravel має чудові правила для паролів, включаючи можливість перевірки, чи не був пароль у попередніх витоках даних. Додаткові деталі можна знайти у документації щодо валідації:
use Illuminate\Validation\Rules\Password;
Password::min(8)
->letters()
->mixedCase()
->numbers()
->symbols()
->uncompromised();