Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/security/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 在另一个域上安全设置会话cookie的最佳方法_Php_Security_Cookies_Hash - Fatal编程技术网

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
单击会打开一个iframe
https://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。