В моем проекте 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.
Я не хочу быть носителем плохих новостей, но этот поток, с которым вы сталкиваетесь, ожидается. Я предполагаю, что в базе данных пароли ваших пользователей на самом деле зашифрованы.
Сама форма данных не должна содержать какой-либо тип шифрования. Как только вы отправляете данные формы на серверную часть, они шифруются. Чтобы правильно зашифровать ввод использования, простые значения должны быть отправлены на сервер. Если вы использовали какой-либо тип «предварительного шифрования», вам нужно будет изменить процесс вашей регистрации, чтобы проверить хеш и разрешить его вставку в базу данных, но это не рекомендуется.
Если вы беспокоитесь о том, чтобы кто-то другой использовал эти данные для проведения XSS-атак, то для устранения этой проблемы вам потребуется настроить CORS / CSRF.
Почему я говорю, что ваша текущая проблема не является проблемой? Что ж, если вы зайдете практически на любой сайт с формой регистрации и отправите ее, вы увидите текстовый пароль в параметрах запроса, как обычно. Facebook и Google отправляют незашифрованный пароль при входе в систему / регистрации. Зачем? Потому что это нормально и ожидаемое поведение.
Любые данные, отправленные через http-соединение, могут быть просмотрены кем-то на вашем маршруте к серверу (человек в середине атаки).
type="password"
только скрывает символ на экране, и даже другие программы на вашем компьютере могут читать данные.
Единственный способ защитить данные — отправить их через SSL (HTTPS вместо HTTP).