1

我正在开发一个网站,用户可以在其中注册和访问他们的帐户,当用户连接时,我使用序列化和 base64 编码将 User 对象保存在 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 中存储对象时可能会受到攻击,但我们必须关注功能而不是网站的安全性。

4

2 回答 2

2

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

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

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

于 2013-06-30T17:09:01.527 回答
0

我终于习惯$_SESSION了让它工作,即使用户不能保持登录到网站。

于 2013-07-23T12:15:30.760 回答