【问题标题】:Unserialized COOKIE returns empty未序列化的 COOKIE 返回空
【发布时间】:2013-03-29 17:58:36
【问题描述】:

我正在尝试以序列化的方式将数组保存到 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 配置。感谢您的帮助。

【问题讨论】:

  • 您是否检查过cookie 是否已设置? (考虑“网络问题”,例如子域或跨域的 cookie 不可用)
  • 是的,isset() 返回 true,但是 cookie 是空的..

标签: php session serialization cookies


【解决方案1】:

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

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

查看本页底部的警告:http://www.php.net/manual/en/function.unserialize.php

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

【讨论】:

  • 好吧,在这种情况下,他/她只能弄乱游戏信息。但无论如何,我正在尝试保存登录状态,以便用户在每次访问该站点时都不会输入他们的 un/pw。这不是饼干的用途吗? (我要求学习,而不是夸夸其谈 :))感谢您的帮助!
  • 要保存登录信息,请创建一个随机值(尽可能随机)并将其保存在 cookie 和您的用户数据库中。您现在可以比较登录时的用户名和密码,或者这个随机值。两者都授予访问权限。
  • 查看这篇帖子,了解如何实施安全的“记住我”系统的更多信息:stackoverflow.com/questions/3128985/php-loginsystem-remember-me
猜你喜欢
  • 2022-12-19
  • 2018-01-14
  • 2016-12-16
  • 2018-10-29
  • 1970-01-01
  • 2015-10-08
  • 1970-01-01
  • 2023-01-27
  • 2015-05-14
相关资源
最近更新 更多