Первое правило: никогда, никогда не храните пароли!
Второе правило: рассчитайте хэш-пароль с дополнительной солью и сохраните его в своей базе данных.
Третье правило: имя пользователя (в верхнем регистре) можно использовать как соль, но желательно добавить немного больше соли! (Некоторый дополнительный текст, желательно что-то длинное.)
Правило четвертое: не имеет значения, насколько безопасен алгоритм хеширования, все они рано или поздно будут взломаны. Все это занимает время!
Пятое правило: безопасность вашего сайта зависит от того, что стоит за ним. Чем больше значение имеет контент, тем больше вероятность того, что вас атакуют!
Правило шестое: рано или поздно вы обнаружите, что ваш сайт взломан, но не через взломанный пароль, а через лазейку в другом месте вашего кода. Наибольший риск заключается в том, что ваш сайт защищен теперь, когда вы внедрили надежную защиту.
Седьмое правило: вся безопасность может быть взломана, все сайты могут быть взломаны, все ваши секреты могут быть раскрыты, если только люди готовы потратить на это достаточно времени.
Безопасность - это иллюзия, но пока никто не нарушает ее, вы можете продолжать мечтать! Всегда будьте готовы к грубым пробуждениям, которые потребуют от вас снова восстановить свою иллюзию. (Другими словами, регулярно создавайте резервные копии! (Желательно ежедневно.) Не перезаписывайте резервные копии на прошлой неделе и убедитесь, что вы сохраняете хотя бы одну резервную копию каждую неделю, на случай, если вы обнаружите, что ваш сайт был взломан несколько месяцев назад и все с тех пор ваши резервные копии заражены!
Теперь, если вам действительно нужно хранить пароли, используйте хэш над именем пользователя и паролем. Тогда снова хеш с хешем плюс соль! А еще лучше, создайте список солей (просто список слов), и всякий раз, когда создается новая учетная запись пользователя, выберите случайное солт-слово, которое будет использоваться для хеширования его имени пользователя и пароля. Сохраните индекс соли с учетной записью пользователя, чтобы вы знали, какую из них использовать при повторном входе в систему.
А:
Восьмое правило: всегда используйте HTTPS! Это не так безопасно, как большинство людей, но дает чувство безопасности вашим пользователям!
Поскольку вы добавили текст, я добавлю больше ответов.
Поскольку вы хотите, чтобы user1 предоставил временный доступ пользователю 2, вам понадобится дополнительная таблица пользователя. (Или разверните пользовательскую таблицу с помощью родительского идентификатора пользователя. Также добавьте временную метку, чтобы отслеживать возраст учетной записи. Пользователь 1 может создавать учетные данные, и это делается обычным способом. Просто сохраните хэш с объединенными именем пользователя и солью. В в этом случае используйте имя пользователя 1 в качестве дополнительной соли! Просто убедитесь, что вы отключите учетную запись пользователя 2, когда пользователь 1 выйдет из системы или когда пройдет определенное время. И разрешите пользователю 1 снова включить все учетные записи, чтобы он создал, чтобы они могли повторно использовать учетную запись вместо того, чтобы постоянно создавать новые.
Безопасность не зависит от первичных или вторичных пользователей. В общем, относитесь к ним так же! Вторичные пользователи имеют дополнительный бонус, который вы можете использовать в качестве дополнительной соли. Остальное больше не имеет ничего общего с аутентификацией. Это авторизация, с которой вы имеете дело. И хотя аутентификация и авторизация тесно связаны, имейте в виду, что вы должны относиться к ним как к двум разным, автономным методам.
Когда пользователь 1 входит в систему, он получает доступ к основному сайту. Когда он предоставляет доступ пользователю 2, пользователь 2 получает ограниченный набор ролей. Но это не имеет ничего общего с хранением имен пользователей или паролей. У вас просто есть идентификатор пользователя, который является членом определенных ролей или групп. Или нет, но они были бы недоступны.
Они оба просто пользователи, один из которых имеет больше прав, чем другой.