我正在开发一个用户可以注册和访问其帐户的网站,当用户连接时,我使用序列化和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中存储对象时容易受到攻击,但我们必须关注功能而不是网站的安全性。
答案 0 :(得分:2)
不要将序列化的字符串存储在外部世界可以看到和操作的东西中!这是一个安全漏洞!为什么呢?
序列化字符串包含用于构建对象的类的名称。这可以改变。反序列化任意字符串意味着创建任意对象。如果此对象代码可用,它将被执行。这基本上是一个远程执行代码漏洞,因为外部攻击者可以在某种程度上选择他想要执行的代码。
如果您确实想要将数据存储在cookie中,请使用仅包含数据的序列化格式,并且不要引用任何PHP对象。 json_encode()
可能是正确的。更好的方法是使用会话并存储与当前登录服务器端相关的任何内容。
答案 1 :(得分:0)
我最终使用$_SESSION
使其正常工作,即使用户无法保持登录网站。