PasswordStrength

Дата обновления перевода 2025-02-05

PasswordStrength

Валидирует, что заданный пароль достиг минимальной надёжности, требуемой ограничением. Надёжность пароля не оценивается с помощью набора заранее определённых правил (включение числа, использование строчных и заглавных букв и т.д.), а путём измерения энтропии пароля на основе его длины и количества использованных уникальных символов.

??????????? ? ???????? ??? ??????
????? PasswordStrength
????????? PasswordStrengthValidator

Базовое применение

Следующее ограничение гарантирует, что свойство rawPassword класса User достигнет минимальной надёжности, требуемой ограничением. По умолчанию минимально требуемая оценка равна 2.

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\PasswordStrength]
    protected $rawPassword;
}

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

minScore

тип: integer по умолчанию: PasswordStrength::STRENGTH_MEDIUM (2)

Минимальная требуемая надёжность пароля. Доступны такие константы:

  • PasswordStrength::STRENGTH_WEAK = 1
  • PasswordStrength::STRENGTH_MEDIUM = 2
  • PasswordStrength::STRENGTH_STRONG = 3
  • PasswordStrength::STRENGTH_VERY_STRONG = 4

PasswordStrength::STRENGTH_VERY_WEAK доступна, но используется только внутренне или же пользовательским оценщиком надёжности пароля.

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\PasswordStrength([
        'minScore' => PasswordStrength::STRENGTH_VERY_STRONG, // Требуется очень надёжный пароль
    ])]
    protected $rawPassword;
}

message

тип: string по умолчанию: Надёжность пароля слишком низкая. Пожалуйста, используйте более надёжный пароль.

Сообщение по умолчанию, отображаемое, если пароль не достигает минимальной требуемой оценки.

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\PasswordStrength([
        'message' => 'Le mot de passe est trop faible. Veuillez utiliser un mot de passe plus fort.'
    ])]
    protected $rawPassword;
}

Настройка оценки надежности пароля

7.2

Функция настройки оценки надежности пароля была представлена в Symfony 7.2.

По умолчанию это ограничение рассчитывает надежность пароля на основе его длины и количества используемых уникальных символов. Вы можете получить рассчитанную надежность пароля (например, чтобы отобразить ее в пользовательском интерфейсе) с помощью следующей статической функции:

1
2
3
use Symfony\Component\Validator\Constraints\PasswordStrengthValidator;

$passwordEstimatedStrength = PasswordStrengthValidator::estimateStrength($password);
Если вам нужно переопределить алгоритм оценки надежности пароля по умолчанию, вы можете передать
Closure конструктору PasswordStrengthValidator (например, с помощью замыканий сервиса closures).

Сначала создайте собственный алгоритм оценки надежности пароля в специальном вызываемом классе:

1
2
3
4
5
6
7
8
9
10
11
12
namespace App\Validator;

class CustomPasswordStrengthEstimator
{
    /**
     * @return PasswordStrength::STRENGTH_*
     */
    public function __invoke(string $password): int
    {
        // Ваш собственный алгоритм оценки надежности пароля
    }
}

Затем сконфигурируйте сервс PasswordStrengthValidator, чтобы использовать вашего собственного оценщика:

1
2
3
4
5
6
7
# config/services.yaml
services:
    custom_password_strength_estimator:
        class: App\Validator\CustomPasswordStrengthEstimator

    Symfony\Component\Validator\Constraints\PasswordStrengthValidator:
        arguments: [!closure '@custom_password_strength_estimator']