因此,持久性cookie容易受到会话劫持的攻击,其中一种窃取cookie的方法是破坏包含记忆令牌的数据库。防止这种情况发生的方法是存储记忆标记的哈希摘要而不是标记本身。
我的问题是:为什么攻击者无法获取记忆令牌和已签名用户ID的哈希摘要,在浏览器中创建新的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
答案 0 :(得分:1)
如果您只在数据库中存储记忆标记的哈希值,并且攻击者可以从数据库中窃取此哈希值,那么他仍然不知道该标记本身。
cookie虽然包含原始令牌,但浏览器会将其发送到服务器。然后,服务器将再次散列此原始令牌,并将其与数据库中的散列进行比较。
如果您只知道哈希值,并且无法使用它检索原始令牌,那么您无法准备cookie,因为它需要原始令牌。像SHA512这样的密码哈希算法不允许"解码"哈希。