Поэтому постоянные cookie-файлы уязвимы для перехвата сеансов, и один из способов кражи cookie-файлов заключается в компрометации базы данных, содержащей токены запоминания. Чтобы предотвратить это, нужно хранить хэш-дайджест токена запоминания вместо самого токена.
Мой вопрос: почему злоумышленник не может получить хэш-дайджест токена запоминания и подписанного идентификатора пользователя, создать новые куки в своем браузере и заполнить эти куки украденными хэш-дайджестами? потому что, насколько я понимаю, не будет BCrypt в аутентифицированных? метод поиска файлов cookie в вашем браузере и расшифровка их, когда они видят украденные хэш-дайджесты? или есть способ определить, были ли файлы cookie созданы пользователем или созданы на сайте?
def current_user
if (user_id = session[:user_id])
@current_user ||= User.find_by(id: user_id)
elsif (user_id = cookies.signed[:user_id])
user = User.find_by(id: user_id)
if user && user.authenticated?(cookies[:remember_token])
log_in user
@current_user = user
end
end
Если вы храните в базе данных только хэш токена запоминания, и злоумышленник может украсть этот хэш из базы данных, он все равно не знает о самом токене.
Файл cookie будет содержать оригинальный токен, и браузер отправит его на сервер. Затем сервер снова будет хэшировать этот оригинальный токен и сравнивать его с хэшем из базы данных.
Если вы знаете только хеш и не можете получить исходный токен с ним, то вы не можете подготовить cookie, потому что для этого нужен оригинальный токен. Криптографические алгоритмы хеширования, такие как SHA512, не позволят «декодировать» хеш.
Других решений пока нет …