我有一个Mothership域,如果您登录它,则会在数据库中为您的登录创建一个令牌,其中包含用户ID,创建日期时间,到期日期时间和用户代理。到期时间设置为令牌生成后一小时(在用户登录时创建)。
为了能够从Mothership登录到Scoutship,我附加了一个像这样的查询字符串
<a href="http://www.spaceship.com?user=ahs6588ads6d8das">go to spaceship</a>
然后在scoutship上,它会像这样查找数据库:
$query = "SELECT user_id FROM user_tokens
WHERE token = $tokenFromUrl
AND user_agent = $thisUserAgent
AND expires > NOW()
LIMIT 1";
如果找到匹配项,则会登录用户,然后发送位置标头以删除查询字符串。
显然,如果有人访问了该URL,它将以任何人的身份登录(如果他们是在旧网站登录的小时内到达,并且具有相同的用户代理字符串)。这对我来说听起来并不安全。
有没有办法加强这种安全性?我应该在数据库中有has_auto_logged_in
的列,并为第一次查找设置为TRUE,并在此之后拒绝所有传入的请求吗?
非常感谢
这是我提出的
所以,如果A人在网站上并且B人(黑客)
,那么打败这个人的唯一方法就是除此之外你还能做更多吗?你可以把我的AJAX脚本放到一个新的哈希并更新链接,但这比它的价值更麻烦吗?
答案 0 :(得分:6)
尝试一下nonce。我甚至为这样的东西保留了一张桌子
当要重定向用户时,根据时间,用户ID等创建随机哈希。通过URL发送。当URL重定向并尝试在另一侧登录用户时,它会检查nonce是否在数据库中。如果是,则将用户登录并删除现时。如果不是,它会拒绝用户。
您甚至可以添加过期日期。
答案 1 :(得分:0)
这就是许多实现中安全性的工作方式。在url或cookie中有SID参数时,您可以看到这些。使这些更安全的唯一方法是使用更大的id。