У меня есть форма Symfony 2, которая отправляет данные для смены пароля пользователей.Однако во время тестирования я обнаружил, что некоторые символы, введенные в поле пароля, экранируются при попадании в валидатор.
Пример:
Пользователь вводит пароль, такой как RzB&EUgbrhqJRt$Y2
В валидаторе этозначение становится RzB&EUgbrhqJRt$Y2
Обратите внимание, что &
сбежал до &
Это просто нарушает некоторые из моих правил проверки.Я не мог найти, почему и как отключить эту экранирующую вещь.Совершенно новичок в Symfony и ищет помощь по этому вопросу.
Код формы сборки:
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder->add('currentPassword', PasswordType::class, [
'constraints' => new UserPassword(['groups' => [UserProfile::VALIDATION_PASSWORD], 'message' => 'Current password is invalid.']),
'mapped' => false,
'attr' => [
'placeholder' => 'Current Login Password',
'required' => 'true',
'data-parsley-required-message' => 'Please enter your current login password',
'autocomplete' => 'disabled'
]
]);
$builder->add(self::FORM_NEW_PASSWORD, RepeatedType::class, [
'type' => PasswordType::class,
'mapped' => false,
'constraints' => [
new NewPassword(['groups' => [UserProfile::VALIDATION_PASSWORD]])
],
'first_options' => [
'attr' => [
'id' => 'change_password_newPassword_first',
'maxlength' => 40,
'minlength' => 10,
'data-parsley-password' => '',
'placeholder' => 'New Password',
'data-parsley-required-message' => 'Please enter your new password',
'autocomplete' => 'disabled'
]
],
'second_options' => [
'attr' => [
'data-parsley-equalto' => '#change_password_newPassword_first',
'placeholder' => 'Confirm New Password',
'data-parsley-required-message' => 'Please re-enter your new password',
'autocomplete' => 'disabled'
]
]
]);
$builder->add('change', SubmitType::class, [
'attr' => [
'class' => 'btn-full-width',
'data-parsley-validate' => 1,
'disabled' => 'disabled'
]
]);
$builder->addEventListener(FormEvents::POST_SUBMIT, [$this, 'onPostSubmit']);
}
Ограничение проверки формы:
public function validate($value, Constraint $constraint)
{
//$value HERE IS ESCAPED
$zxcvbn = new Zxcvbn();
$strength = $zxcvbn->passwordStrength($value);
$pp = new PwnedPasswords();
if (!preg_match(NewPassword::REGEX, $value)) {
// Match password pattern
$this->context->buildViolation($constraint->messagePasswordNotValid)
->setParameter('{{ value }}', $this->formatValue($value))
->addViolation();
} else if ($strength["score"] < 3) {
// Calculate password strength
$this->context->buildViolation($constraint->messagePasswordNotStrong)
->setParameter('{{ value }}', $this->formatValue($value))
->addViolation();
} else if ($pp->isInsecure($value)) {
// Check to see if the password is breached
$this->context->buildViolation($constraint->messagePasswordBreached)
->setParameter('{{ value }}', $this->formatValue($value))
->addViolation();
}
}
ИСПРАВЛЕНО:
Проблема, вызванная html_purifier_extension в конфигурации форм.Отключение, которое решило проблему.Хотя extended_type: Symfony\Component\Form\Extension\Core\Type\TextType
, не уверен, почему это повлияло и на поле пароля.Нужно расследовать больше.