PHP在cookie中存储对象不起作用

时间:2013-06-30 16:59:48

标签: php oop setcookie

我正在开发一个用户可以注册和访问其帐户的网站,当用户连接时,我使用序列化和base64编码将用户对象保存在cookie中。它工作得很好,突然PHP脚本不想创建cookie。我的PHP脚本是:

/**
 * Function that creates a cookie from an User object
 * @param User $user User object to be stored in the cookie
 * @param int $timeout Lifetime of the cookie (0 if should be destroyed when the navigator is closed)
 */
function setUserCookie($user, $timeout = COOKIE_MAXLIFETIME) {
    setcookie('user', base64_encode(serialize($user)), $timeout, '/');
}

我不知道问题出在哪里,我希望有人会帮助我:)。

编辑: 这是大学的一个项目,我知道我的网站在cookie中存储对象时容易受到攻击,但我们必须关注功能而不是网站的安全性。

2 个答案:

答案 0 :(得分:2)

不要将序列化的字符串存储在外部世界可以看到和操作的东西中!这是一个安全漏洞!为什么呢?

序列化字符串包含用于构建对象的类的名称。这可以改变。反序列化任意字符串意味着创建任意对象。如果此对象代码可用,它将被执行。这基本上是一个远程执行代码漏洞,因为外部攻击者可以在某种程度上选择他想要执行的代码。

如果您确实想要将数据存储在cookie中,请使用仅包含数据的序列化格式,并且不要引用任何PHP对象。 json_encode()可能是正确的。更好的方法是使用会话并存储与当前登录服务器端相关的任何内容。

答案 1 :(得分:0)

我最终使用$_SESSION使其正常工作,即使用户无法保持登录网站。

相关问题