FOSUserBundle, пароль (plainPassword) не шифруются при отправке формы POST

В моем проекте Symfony я использую FOS пользовательский пакет.

В моем secutity.yml у меня есть это, чтобы использовать кодировщик bcrypt:

security:
# FOS UserBundle needles
encoders:
Symfony\Component\Security\Core\User\User: bcrypt
MyNamespace\MyBundle\Entity\User: bcrypt
FOS\UserBundle\Model\UserInterface: bcrypt

Я вызываю форму регистрации пользователя fos в такой форме:

$builder
->add('contactPhone')
->add('contactMobilePhone')
->add('user', 'fos_user_registration', array(
'label' => false,
))

Это делает мне это, например:
введите описание изображения здесь

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

Таким образом, я могу восстановить все данные моего POST-запроса в браузере консоли:

my_form[user][email][email protected]

my_form[contactPhone]=0404040404

my_form[contactMobilePhone]=0606060606

my_form[user][username]=test

my_form[user][plainPassword][first]=test // первый пароль

my_form[user][plainPassword][second]=test // проверка

my_form[save] // отправить my_form [_token_consumer] = // нет необходимости его видеть

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

Обратите внимание, что то же самое происходило, когда я регистрировал себя с помощью формы входа пользователя FOSUserBundle.

0

Решение

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

Сама форма данных не должна содержать какой-либо тип шифрования. Как только вы отправляете данные формы на серверную часть, они шифруются. Чтобы правильно зашифровать ввод использования, простые значения должны быть отправлены на сервер. Если вы использовали какой-либо тип «предварительного шифрования», вам нужно будет изменить процесс вашей регистрации, чтобы проверить хеш и разрешить его вставку в базу данных, но это не рекомендуется.

Если вы беспокоитесь о том, чтобы кто-то другой использовал эти данные для проведения XSS-атак, то для устранения этой проблемы вам потребуется настроить CORS / CSRF.

Почему я говорю, что ваша текущая проблема не является проблемой? Что ж, если вы зайдете практически на любой сайт с формой регистрации и отправите ее, вы увидите текстовый пароль в параметрах запроса, как обычно. Facebook и Google отправляют незашифрованный пароль при входе в систему / регистрации. Зачем? Потому что это нормально и ожидаемое поведение.

1

Другие решения

Любые данные, отправленные через http-соединение, могут быть просмотрены кем-то на вашем маршруте к серверу (человек в середине атаки).

type="password" только скрывает символ на экране, и даже другие программы на вашем компьютере могут читать данные.

Единственный способ защитить данные — отправить их через SSL (HTTPS вместо HTTP).

2

По вопросам рекламы [email protected]