0

我正在尝试以序列化的方式将数组保存到 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.
}

现在奇怪的是整个事情都在我的本地主机上工作,但它在 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 配置。谢谢你的帮助。

4

1 回答 1

0

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

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

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

第二件事是:为什么您需要在单独的 cookie 中提供身份验证信息,以及与它有什么联系?如果攻击者更改任何值,尤其是用户 ID 或状态,他将能够做什么?我想他可能会接触到他不应该接触到的东西。

于 2013-04-07T20:22:35.357 回答