在我的一个网站上,我设置了ini_set('session.use_trans_sid', 1)
,允许没有Cookie的用户使用该网站。它通过URL来跟踪会话。
然而,我遇到了一个严重的安全问题,这使得会话很容易被劫持。
基本上,谷歌使用抓取时提供的会话ID对页面进行索引,因为谷歌机器人不使用Cookie。
然后,当有人搜索我的网站,然后在谷歌中点击包括旧会话URL的搜索结果时,旧会话ID现在变成了他们的会话ID(而不是正在生成的新会话ID)。
因此,当用户登录时,他们的帐户将使用谷歌上所有索引的会话ID登录!这意味着任何其他用户搜索我们的网站并在谷歌中点击其中一个搜索结果都会自动登录到该其他用户帐户
谈论一个巨大的安全漏洞!
我该怎么解决这个问题?我本以为PHP会识别出会话ID不再有效(或不再存在),然后生成一个新的会话ID,但它似乎并没有这么做。似乎如果它真的这么做了,就会解决这个问题。
请帮忙!
编辑:
这里本质上发生的是,PHP允许任何人通过在URL中输入他们想要的会话ID参数来创建自己的自定义会话ID,PHP将开始将其用作会话ID!所以,当有人用Googlebot的旧会话ID点击谷歌上的链接时,PHP会让用户"自定义"会话ID。肯定出了什么问题!
您应该查看http://php.net/manual/en/function.session-regenerate-id.php当用户登录时重新生成SID,这样谷歌搜索中的任何SID都将在他们使用它登录时无效。