Я не знаю точно, как Rails справляется с этим, но если бы я писал это вручную, скажем в PHP, то чтобы получить введенные данные формы обратно в форму, после ошибки проверки, тогда мне пришлось бы вернуть данные в атрибут значения каждого входа.
Нет ничего технически мешающего мне делать это с помощью ввода пароля, но это означало бы, что я должен был бы передать им свой собственный пароль в виде обычного текста. Это, я думаю, является нарушителем транзакций, потому что это дает еще одну возможность для перехвата пароля.
После прочтения этой темы кажется, что многие люди считают это также формой «хранения» пароля в виде простого текста, который явно плох. Однако мне совершенно не ясно, почему это считается «сохранением» пароля, поскольку серверу явно не нужно было бы хранить текстовый пароль в любом месте, кроме того, в той же самой переменной, которая использовалась для получения пароля обычного текста в первое место. Однако может случиться так, что они означают, что пароль хранится в ответе HTTP, что по сути является той же проблемой, что и выше.
Другая причина, по которой я видел, - это то, что для вставки пароля обратно в ввод пароля потребуется использовать атрибут value. Хотя это будет затенять пароль на визуализированном входе, пароль будет отображаться при проверке источника, например, Firebug. Для меня это не проблема, потому что тривиально превращать тип ввода с паролем в текст и вскрыть пароль в любом случае или просто использовать JS. Абсолютно некорректно думать, что поле пароля обеспечивает много встроенной безопасности, затеняя пароль визуально.
Что вы можете сделать, это:
- Хэш пароля (предполагая это, сам, проходит валидация) и хранить, что даже если остальная часть данных не проходит проверку
- Отключение пароля поля на возвращаемый формы или иным образом указывать пользователю, что пароль, который они отправили, был принят, но остальная часть данных формы должна быть исправлена.
- Опционально, чтобы пользователь мог повторно активировать поля пароля, если они решили, что им нужен другой пароль.
- Запустите задачу cron, которая регулярно очищает базу данных любых потерянных паролей, когда пользователь по какой-либо причине не удосужился продолжить регистрацию, но подал форму с ошибками, по крайней мере, один раз.
Я не могу сразу увидеть, как это может скомпрометировать безопасность.
Другим подходом было бы иметь многоступенчатую форму и иметь входные данные для ввода пароля и пароля самостоятельно на последнем шаге. Таким образом, вы можете гарантировать, что остальная часть данных действительна к моменту достижения пользователем пароля и если у них есть какие-либо ошибки в их паролях (например, пароль и подтверждение пароля не совпадают), вы можете утверждать, что это разумно затем сделать оба поля пустым, так как пользователь не сможет легко устранить проблему с закрытыми паролями.
u не должен помнить значения для полей подтверждения пароля или пароля. они должны заполняться явным образом каждый раз. –
Ответ на мою проблему по-прежнему интересует меня. Во всяком случае, почему я не должен помнить значения для полей пароля? – Silex
пароли не хранятся в браузере с его конфиденциальной информации. см. http://stackoverflow.com/questions/3040731/should-autocomplete-off-be-used-for-all-sensitive-fields –