Какие меры безопасности следует предпринять при создании функции «изменить пароль»? - PullRequest
13 голосов
/ 20 сентября 2010

Я добавляю функцию «изменить пароль» в мою веб-игру http://ninjawars.net, которая в настоящее время имеет фиксированные (и практически никогда не меняющиеся) пароли.

Я хочу избежать этой путаницы, поэтому я хотел бы убедиться, что у меня есть базовые основы безопасности.

Взяв то, что я могу извлечь из того, как Facebook работает, несколько моментов, которые следует запомнить:

  • Требуется старый пароль (конечно).
  • Подтвердите ввод нового пароля дважды.
  • выйти из учетной записи (только на всех других страницах, как-нибудь)?
  • Требуется длина защищенного пароля и чтобы пароль соответствовал всем [введите различные критерии здесь] , требуемым для паролей в каждой конкретной системе.
  • Требуется, чтобы новый пароль отличался от старого.
  • Запретить несколько попыток смены пароля.

Facebook также:
- Требуется, чтобы новый пароль отличался от предыдущих паролей. (похоже на крайний случай)

Это только те политики, которые я могу выбрать из внешнего интерфейса системы учетных записей Facebook. Какие другие моменты безопасности я должен учитывать при предоставлении системы «смена пароля»?

Edit: В моем конкретном случае я намерен быть относительно разрешительным с [вставить различные критерии] для того, какие символы должны вводиться в самом пароле. Мой сайт не является банком, если игрок хочет использовать пароль «password1», он должен ожидать, что его учетная запись будет передана его друзьям. МОЙ ФОКУС , с другой стороны, обеспечивает, чтобы мой сайт предотвращал любые возможности "враждебного захвата" из-за небезопасных действий в самой системе смены пароля .

Больше хороших моментов из ответов ниже:

  • Отправить уведомление об изменении пароля на электронную почту пользователя.
  • Сохраняйте смену электронной почты и смену пароля, каждый из которых зависит друг от друга.
  • Используйте безопасное зашифрованное (https) соединение для таких изменений.

Ответы [ 8 ]

8 голосов
/ 20 сентября 2010

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

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

4 голосов
/ 20 сентября 2010

Это, вероятно, очевидно, но не забудьте выполнить весь процесс смены пароля через зашифрованное соединение (HTTPS).

2 голосов
/ 20 сентября 2010

Интересный поворот, который я хотел бы получить, если я введу действительно длинный пароль, пожалуйста, не заставляйте меня включать некоторые типы символов. Многие системы требуют действительно запутанных комбинаций букв, заглавных букв, цифр и специальных символов, которые я неизбежно заканчиваю тем, что создаю «одобренный» пароль из 6 символов, когда все, что мне нужно, это 35 символов только в маленьких заглавных буквах - но это было отвергнуто как «небезопасное». Ха ^^

Также, если вы используете какую-либо библиотеку классов, фреймворк или шаблон, который имеет встроенную функциональность кода - используйте его, вместо того, чтобы использовать свой собственный. На самом деле, даже если нет - посмотрите на хорошо протестированные надстройки или внешние решения (OpenId?) - безопасность сложна и является одним из худших мест для изобретения колес в imo.

2 голосов
/ 20 сентября 2010

Я заметил, что никто еще не предложил это, или я пропускаю некоторые тонкости в ответе другого.

Разрешать изменение пароля разрешается только в том случае, если пользователь знает «секретную строку», которая будет отправлена ​​на его адрес электронной почты, когда он запросит изменение пароля. Для удобства вы можете сделать эту «секретную строку» в виде URL-адреса, чтобы они могли просто быстро щелкнуть ее по электронной почте. Это гарантирует, что лицо, запрашивающее изменение пароля, может также войти в систему с зарегистрированным адресом электронной почты (люди, как правило, более расслаблены, используя свой игровой аккаунт, чем свой личный адрес электронной почты).

Как упомянул ChrisF, вам необходимо убедиться, что этот человек не может одновременно изменить пароль и электронную почту. Вам также необходимо убедиться, что для изменения адреса электронной почты требуется знание текущего пароля (вам, вероятно, не нужно требовать, чтобы пользователь мог войти в свой старый адрес электронной почты, чтобы прочитать «секретную строку», поскольку основная причина изменения адреса электронной почты заключается в том, что они потерять свой старый адрес электронной почты).

2 голосов
/ 20 сентября 2010

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

1 голос
/ 20 сентября 2010

Это действительно зависит от того, какая информация защищена паролем.Например, требование к паролю, если у вас есть финансовая информация пользователя, должно сильно отличаться от того, если у вас есть только его имя или что-то в этом роде.Кроме того, имейте в виду, что диктаторские требования к паролям будут стимулировать пользователей только создавать небезопасные пароли, которые соответствуют требованиям.У вас должно быть достаточно высокое ограничение на количество символов, которые вы разрешаете вводить в пароле (если пользователи хотят сделать свои пароли более надежными, позвольте им).Вам также следует разрешить пользователям использовать как прописные, так и строчные буквы, разрешить им использовать цифры, а также разрешить им использовать символы в пароле.

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

1 голос
/ 20 сентября 2010

Я думаю, вам также следует проверить, не совпадает ли пароль с логином.Некоторые пользователи делают это, поверьте мне.

0 голосов
/ 20 сентября 2010

Я только думал об этой проблеме сегодня.

Вместо обычных требований к сложности, я думаю, было бы интересно загрузить одну из свободно доступных радужных таблиц MD5 и выбросить эти пароли в базу данных NoSQL.Затем, когда пользователь идет, чтобы установить свой пароль, попробуйте найти пароль, который он выбирает.Если вы его найдете, отклоните этот пароль.

В масштабе это можно сделать только с одним или двумя выделенными ящиками, на которых размещена служба поиска, поскольку установка / изменение пароля является такой нечастой операцией.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...