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

ale*_*lex 1 php mysql security kohana cross-domain

我有一个Mothership域,如果您登录它,将在数据库中为您的登录创建一个令牌,其中包含用户ID,创建日期时间,到期日期时间和用户代理.到期时间设置为令牌生成后一小时(在用户登录时创建).

为了能够从Mothership登录到Scoutship,我附加了一个类似的查询字符串

<a href="http://www.spaceship.com?user=ahs6588ads6d8das">go to spaceship</a>
Run Code Online (Sandbox Code Playgroud)

然后在scoutship上,它像这样查找数据库:

$query = "SELECT user_id FROM user_tokens
                    WHERE token = $tokenFromUrl
                        AND user_agent = $thisUserAgent
                        AND expires > NOW()
            LIMIT 1";
Run Code Online (Sandbox Code Playgroud)

如果找到匹配项,则会登录用户,然后发送位置标头以删除查询字符串.

显然,如果有人访问了该URL,它将以任何人的身份登录(如果它们是在旧网站登录的小时内到达,并且具有相同的用户代理字符串).这对我来说听起来并不安全.

有没有办法加强这种安全性?我应该在数据库中有一个列,has_auto_logged_in并为第一次查找设置为TRUE,并在此之后拒绝所有传入的请求?

非常感谢

UPDATE

这就是我想出的

  • 每个请求都会创建一个具有15分钟到期日期的新nonce并保存用户代理
  • 将nonce哈希值添加到查询字符串中的传出URL
  • 新站点将确保散列匹配nonce,并且在15分钟到期之内并且具有相同的用户代理.然后它将删除该nonce.
  • 发送位置标头以删除查询字符串.

因此,如果A人在网站上并且B人(黑客),那么唯一能够击败这一点的方法就是

  • 拥有完全相同的用户代理字符串(或伪造它)
  • 观察哈希并在他们自己的浏览器中访问它,但在15分钟内,在人A发出任何新请求之前

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

Tyl*_*ter 6

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

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

您甚至可以添加到期日.