NotCompromisedPassword

Дата оновлення перекладу 2022-12-19

NotCompromisedPassword

Валідує, що заданий пароль не було скомпроментовано, перевіряючи, щоб він не включений до жодного з витоків публічних даних, які відслідковуються haveibeenpwned.com.

?????????????? ?? ??????????? ??? ??????
???? NotCompromisedPassword
????????? NotCompromisedPasswordValidator

Базове застосування

Наступне обмеження гарантує, що властивість rawPassword класу User не зберігає скомпроментований пароль:

  • Attributes
  • YAML
  • XML
  • PHP
1
2
3
4
5
6
7
8
9
10
// src/Entity/User.php
namespace App\Entity;

use Symfony\Component\Validator\Constraints as Assert;

class User
{
    #[Assert\NotCompromisedPassword]
    protected $rawPassword;
}

Для того, щоб провести валідацію пароля, це обмеження не відправляє сире значення пароля API haveibeenpwned.com. Замість цього, воно дотримується безпечного процесу, відомого як валідація пароля k-anonymity.

На практиці, сирий пароль хешується з використанням SHA-1 і лише перші байти хешу відправляються. Потім, API haveibeenpwned.com порівнює ці байти з хешами SHA-1 усіх скомпроментованих паролів та повертає список хешів, які починаються з таких самих байтів. Таким чином обмеження може перевірити, чи було скомпроментовано парольь, не розкриваючи його повністю.

Наприклад, якщо пароль test, цілий хеш SHA-1 буде a94a8fe5ccb19ba61c4c0873d391e987982fbbd3, але валідатор видправить API haveibeenpwned.com тільки a94a8.

See also

При викоистанні цього обмеження всередині додатку Symfony, визначіть опцію not_compromised_password , щоб уникнути створення HTTP-запитів у середовищах dev та test.

Доступні опції

Дата оновлення перекладу 2022-12-20

groups

тип: array | string

Визначаэ групу або групи валідації обмеження. Прочитайте більше про групи валідації.

message

тип: string за замовчуванням: Цей пароль було скомпроментовано у витоку даних і не має використовуватися. Будь ласка, використайте інший пароль.

Повідомлення за замовчуванням відображуване, якщо пароль було скомпроментовано.

Дата оновлення перекладу 2022-12-20

payload

тип: mixed за замовчуванням: null

Ця опція може бути використана, щоб додати довільні дані, специфічні для домену, до обмеження. Сконфігуроване корисне навантаження не використовується компонентом Validator, але його обробка повністю залежить від вас.

Наприклад, ви можете захотіти використати декілька рівнів помилок, щоб представити неуспішні обмеження по-різному у фронтенді, залежно від серйозності помилки.

skipOnError

тип: boolean за замовчуванням: false

Коли HTTP-запит, зроблений до API haveibeenpwned.com, зазнає невдачи за будь-якої причини, викликається виключення (помилка валідації не відображається). Встановіть цю опцію як true, щоб не викликати виключення і вважати пароль валідним.

threshold

тип: integer за замовчуванням: 1

Це значення визначає скільки разів пароль мав фігурувати у публічному витоку даних,
щоб вважати його скомпроментованим. Уважно подуймате перед тим, як встановлювати цю опцію у вище значення, так як це знизить безпеку вашого додатку.