是否有人可以窃取记忆令牌的哈希摘要并使用哈希摘要创建假 cookie?
Is it possible for someone to steal a hash digest of the remember token and create a fake cookie using the hashed digest?
所以持久性 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
如果你只在数据库中存储记住令牌的散列,而攻击者可以从数据库中窃取这个散列,他仍然不知道令牌本身。
虽然 cookie 将包含原始令牌,但浏览器会将其发送到服务器。然后服务器将再次对这个原始令牌进行哈希处理,并将其与数据库中的哈希值进行比较。
如果您只知道散列,而无法用它检索原始令牌,那么您无法准备 cookie,因为它需要原始令牌。 SHA512 等加密哈希算法不允许 "decode" 哈希。
所以持久性 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
如果你只在数据库中存储记住令牌的散列,而攻击者可以从数据库中窃取这个散列,他仍然不知道令牌本身。
虽然 cookie 将包含原始令牌,但浏览器会将其发送到服务器。然后服务器将再次对这个原始令牌进行哈希处理,并将其与数据库中的哈希值进行比较。
如果您只知道散列,而无法用它检索原始令牌,那么您无法准备 cookie,因为它需要原始令牌。 SHA512 等加密哈希算法不允许 "decode" 哈希。