Дата обновления перевода 2021-09-29

NotCompromisedPassword

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

Применяется свойство или метод
к опциям
Класс NotCompromisedPassword
Валидатор NotCompromisedPasswordValidator

Базовое использование

Следующее ограничение гарантирует, что свойство rawPassword класса User не содержит скомпроментированный пароль:

  • Annotations
     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    // src/Entity/User.php
    namespace App\Entity;
    
    use Symfony\Component\Validator\Constraints as Assert;
    
    class User
    {
        /**
         * @Assert\NotCompromisedPassword
         */
        protected $rawPassword;
    }
    
  • Attributes
     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;
    }
    
  • YAML
    1
    2
    3
    4
    5
    # config/validator/validation.yaml
    App\Entity\User:
        properties:
            rawPassword:
                - NotCompromisedPassword
    
  • XML
     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    <!-- config/validator/validation.xml -->
    <?xml version="1.0" encoding="UTF-8" ?>
    <constraint-mapping xmlns="http://symfony.com/schema/dic/constraint-mapping"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://symfony.com/schema/dic/constraint-mapping https://symfony.com/schema/dic/constraint-mapping/constraint-mapping-1.0.xsd">
    
        <class name="App\Entity\User">
            <property name="rawPassword">
                <constraint name="NotCompromisedPassword"></constraint>
            </property>
        </class>
    </constraint-mapping>
    
  • PHP
     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    // src/Entity/User.php
    namespace App\Entity;
    
    use Symfony\Component\Validator\Constraints as Assert;
    use Symfony\Component\Validator\Mapping\ClassMetadata;
    
    class User
    {
        public static function loadValidatorMetadata(ClassMetadata $metadata)
        {
            $metadata->addPropertyConstraint('rawPassword', new Assert\NotCompromisedPassword());
        }
    }
    

Для того, чтобы провести валидацию пароля, это ограничение не отправляет необработанное значение пароля 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 this constraint belongs to. Read more about validation groups.

message

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

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

payload

type: mixed default: null

This option can be used to attach arbitrary domain-specific data to a constraint. The configured payload is not used by the Validator component, but its processing is completely up to you.

For example, you may want to use several error levels to present failed constraints differently in the front-end depending on the severity of the error.

skipOnError

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

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

threshold

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

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

Эта документация является переводом официальной документации Symfony и предоставляется по свободной лицензии CC BY-SA 3.0.