未序列化的COOKIE返回空

时间:2013-04-07 17:57:33

标签: php session serialization cookies

我正在尝试以序列化的方式将数组保存到cookie中。所以我做的是:

 $serial_auth = serialize($_SESSION['auth']);
 setcookie("auth_cookie", $serial_auth , 2592000 + time());

在下一页我试图使用这样的数据:

if(isset($_COOKIE['auth_cookie']))
{
$_SESSION['auth'] = unserialize($_COOKIE['auth_cookie']); //but it returns an empty array.
}

现在奇怪的是整个东西在我的localhost中工作,但它在000webhost站点上不起作用。

并注意:当我试图回应那些时,我明白了:

$_SESSION['auth'] = 
Array ( [status] => ok [userid] => 1 [username] => user11 [visiblename] => user11 ) 
SERIALIZED =
a:4:{s:6:"status";s:2:"ok";s:6:"userid";s:1:"1";s:8:"username";s:6:"user11";s:11:"visiblename";s:6:"user11";}

这可能是一个PHP配置问题,但我想知道是否有办法解决这个问题,而不更改任何PHP配置。谢谢你的帮助。

1 个答案:

答案 0 :(得分:0)

这有严重的安全缺陷,不应该做。

攻击者可以将cookie值设置为任何内容,包括序列化对象。这些对象可以在重新创建时执行代码。因此,攻击者可以通过向您发送正确制作的序列化字符串来执行您计算机上的代码!人们不能让攻击者能够做到这一点。

请参阅本页底部的警告:http://www.php.net/manual/en/function.unserialize.php

第二件事是:为什么你需要在单独的cookie中使用身份验证信息,以及与之相关的内容?如果攻击者更改了任何值,尤其是用户ID或状态,攻击者能够做什么?我认为他可能会获得他不应该做的事情。