РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
339 of 1361 menu

Правило NotCompromisedPassword

Правило NotCompromisedPassword является ограничением валидации и вешается на поле формы или свойство сущности. Оно проверяет, не встречался ли введённый пароль в базах утечек. Проверка выполняется через сервис Have I Been Pwned. Правило не гарантирует абсолютную безопасность, но отсеивает уже скомпрометированные пароли.

Синтаксис

#[NotCompromisedPassword( message: 'The password has been compromised.', threshold: 1, skipOnError: false )]

Пример

Давайте создадим сущность User с полем password и повесим на него правило NotCompromisedPassword:

<?php namespace AppEntity; use DoctrineORMMapping as ORM; use SymfonyComponentValidatorConstraints as Assert; #[ORMEntity] class User { #[ORMId] #[ORMGeneratedValue] #[ORMColumn(type: 'integer')] private int $id; #[ORMColumn(type: 'string', length: 255)] #[AssertNotCompromisedPassword] private string $password; public function getId(): int { return $this->id; } public function setPassword(string $password): self { $this->password = $password; return $this; } } ?>

Пример

Давайте проверим пароль через валидатор вручную:

<?php namespace AppController; use AppEntityUser; use SymfonyBundleFrameworkBundleControllerAbstractController; use SymfonyComponentHttpFoundationResponse; use SymfonyComponentValidatorValidatorValidatorInterface; class UserController extends AbstractController { public function check(ValidatorInterface $validator): Response { $user = new User(); $user->setPassword('abcde'); $errors = $validator->validate($user); if (count($errors) > 0) { return new Response((string) $errors); } return new Response('valid'); } } ?>

Результат выполнения кода для пароля 'abcde':

"valid"

Пример

Давайте используем правило внутри формы:

<?php namespace AppForm; use SymfonyComponentFormAbstractType; use SymfonyComponentFormExtensionCoreTypePasswordType; use SymfonyComponentFormFormBuilderInterface; use SymfonyComponentValidatorConstraintsNotCompromisedPassword; use SymfonyComponentOptionsResolverOptionsResolver; class UserType extends AbstractType { public function buildForm( FormBuilderInterface $builder, array $options ): void { $builder->add('password', PasswordType::class, [ 'constraints' => [ new NotCompromisedPassword(), ], ]); } public function configureOptions(OptionsResolver $resolver): void { $resolver->setDefaults([ 'data_class' => User::class, ]); } } ?>

Смотрите также

  • правило PasswordStrength,
    которое проверяет надёжность пароля
  • правило NotBlank,
    которое проверяет, что поле не пустое
  • правило Length,
    которое проверяет длину строки
  • правило Regex,
    которое проверяет строку на соответствие регулярному выражению
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить