NotCompromisedPassword

Дата обновления перевода 2023-01-13

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.

Доступные опции

groups

type: array | string

It defines the validation group or groups of this constraint. Read more about validation groups.

message

тип: string по умолчанию: Этот пароль был продемонстрирован при утечке данных, он не должен быть использован. Пожалуйста, используйте другой пароль.

Сообщение отображённое по умолчанию, если пароль был скомпроментирован.

payload

тип: mixed по умолчанию: null

Эта опция может быть использована, чтобы добавить к ограничению произвольные данные, относящиеся к домену. Сконфигурированная нагрузка не используется компонентом Валидатор, но его обработка полностью зависит от вас.

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

skipOnError

тип: boolean по умолчанию: false

Когда HTTP-запрос к API haveibeenpwned.com терпит неудачу по какой-либо причине, вызывается исключение (ошибка валидации не отображается). Установите эту опцию как true, чтобы не вызывать исключение, и считать пароль валидным.

threshold

тип: integer по умолчанию: 1

Это значение определяет количество раз, которое пароль мог быть "слит" публично, чтобы считать его скомпроментированным. Хорошо подумайте, прежде, чем устанавливать эту опцию в более высокие значения, так как это может нарушить безопасность вашего приложения.