Php 在另一个域上安全设置会话cookie的最佳方法
我们目前有两个网站Php 在另一个域上安全设置会话cookie的最佳方法,php,security,cookies,hash,Php,Security,Cookies,Hash,我们目前有两个网站http://www.foo.co.uk和https://secure.foo.com www站点没有SSL证书,并且位于不同的域上 我们在http://www.foo.co.uk单击会打开一个iframehttps://secure.foo.com使用表单,当用户登录时,它会在该域上创建会话cookie(foo.com) 然后需要将会话cookie复制到foo.co.uk,因此它会将您重定向到http://www.foo.co.uk/setcookie.php?session
http://www.foo.co.uk
和https://secure.foo.com
www站点没有SSL证书,并且位于不同的域上
我们在http://www.foo.co.uk
单击会打开一个iframehttps://secure.foo.com
使用表单,当用户登录时,它会在该域上创建会话cookie(foo.com
)
然后需要将会话cookie复制到foo.co.uk
,因此它会将您重定向到http://www.foo.co.uk/setcookie.php?session=abcd1234
允许我们在源域上设置相同的cookie
这不是一个非常安全的解决方案,因此我一直在研究如何使它变得更好-我发现的最好的方法是使用类似于hash_hmac
的东西和参数将哈希发送到setcookie.php脚本,然后在创建cookie之前在另一端验证它
虽然这更好,但并不能阻止中间人的攻击。请记住,www不是SSL安全的,我认为您无法完全防止这种情况,因此,下一个最好的方法是在哈希中包含一个时间戳,使其在5分钟内有效
有没有人对我如何改进这一点有任何想法,或者指出这种方法的任何缺陷?非常感谢。您可以在两个域之间共享一个秘密,并使用对称加密算法加密cookie值,或者在不安全域中设置公钥/私钥,并使安全域使用不安全域的公钥加密cookie
另外,请记住,加密登录过程但随后通过不安全的通道传输会话cookie可能会允许攻击者模拟您的用户(有关更多信息,请参阅Firefox扩展)。您可以在security.stackexchange.com上尝试此操作。这里有很多聪明的人,你可能会在这里得到很好的答案,但从纯粹的安全角度来看,他们可能是我们不会做的事情。我的直觉告诉我,在另一个域中设置会话cookie没有好方法,正确的做法是更改业务规则,这样就没有必要了。但那只是本能反应,是的。如果您将其与一个四舍五入的时间戳相结合,那么它也可以合理地避免重播攻击。我以前提到过-只要域A可以向域B证明它是谁,那么域B就可以安全地设置A选择的cookie。