Я пытаюсь написать простой HTTP, запомни меня систему аутентификации для пользователей.
Мои пользователи могут быть представлены как таковые
{
"email" : "foo@bar.com",
"password" : "8EC41F4334C1B9615F930270A4F8BBC2F5A2FCD3" // sha1 hash of password
}
Таким образом, моя идея заключается в том, что мне нужно создать cookie с неопределенным (очень длительным) сроком действия, который будет содержать некоторую информацию типа, позволяющую мне выбрать пользователя из базы данных, следовательно, войдя в систему.
Моей первой идеей было просто сохранить строку email:password
в виде файла cookie. Я подумал, что это было бы хорошо, так как никто другой не может генерировать такую информацию, кроме самого пользователя, и я мог бы довольно легко найти пользователя, просто сравнив username
и password
на основе того, что находится в базе данных.
Однако тогда я подумал, что это не очень хорошо. Он фактически превращает дайджест пароля во второй пароль, который хранится в открытом виде и передается по проводам при каждом запросе.
Тогда я подумал, что, возможно, я смогу генерировать signature
каждый раз, когда пользователь входит в систему, что в основном будет случайным хешем, который хранится непосредственно в объекте пользователя в базе данных.
Пользователь входит в систему, он генерирует эту подпись, которая сохраняется, и cookie содержит эту подпись. Каждый раз, когда вы заходите на веб-сайт, сайт проверяет, у какого пользователя есть эта конкретная подпись, и входит в систему. Выход из системы эффективно удаляет cookie, а при новых входах в систему создается новая случайная подпись.
Учитывает ли этот подход какие-либо другие уязвимости?
Я знаю, мне, вероятно, следует использовать библиотеку, уже созданную для этого, но это просто упражнение в сетевой безопасности.