如何通过跨域用户会话加强此安全性?

时间:2010-03-03 02:26:02

标签: php mysql security cross-domain kohana

我有一个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,并在此之后拒绝所有传入的请求吗?

非常感谢

更新

这是我提出的

  • 每个请求都会创建一个新的nonce,其有效期为15分钟并保存用户代理
  • 将nonce哈希值添加到查询字符串
  • 中的外发URL
  • 新网站将确保哈希值与现时符号匹配,并且在15分钟到期时间内具有相同的用户代理。然后它将删除该nonce。
  • 发送位置标头以删除查询字符串。

所以,如果A人在网站上并且B人(黑客)

,那么打败这个人的唯一方法就是
  • 拥有完全相同的用户代理字符串(或伪造)
  • 观察哈希并在他们自己的浏览器中访问它,但在15分钟内,在A人提出任何新请求之前

除此之外你还能做更多吗?你可以把我的AJAX脚本放到一个新的哈希并更新链接,但这比它的价值更麻烦吗?

2 个答案:

答案 0 :(得分:6)

尝试一下nonce。我甚至为这样的东西保留了一张桌子

当要重定向用户时,根据时间,用户ID等创建随机哈希。通过URL发送。当URL重定向并尝试在另一侧登录用户时,它会检查nonce是否在数据库中。如果是,则将用户登录并删除现时。如果不是,它会拒绝用户。

您甚至可以添加过期日期。

答案 1 :(得分:0)

这就是许多实现中安全性的工作方式。在url或cookie中有SID参数时,您可以看到这些。使这些更安全的唯一方法是使用更大的id。