1

我需要将结构化数据存储在 cookie 中。
一些目录页面的收藏夹。数据{ {id,type} , {id,type} , ... }
在我的代码中,我需要将其放回数组中。所以我正在使用该unserialize()功能来恢复数据。
有没有办法防止对象注入?反序列化功能的任何替代方案?

4

4 回答 4

1

好吧,如果您已经定义了数组的外观结构,那么只需确保您要反序列化的字符串在迭代时确实是一个数组,只需检查值类型 (id -> int, type - > 字符串)。

另外,我认为 json_encode 在您的数据情况下会更好,它的大小更小,解码速度更快(您可以在客户端使用它)。

于 2013-09-24T22:33:08.287 回答
1

有没有办法防止对象注入

当你反序列化一个对象时,PHP 将调用__wakeup类定义中的方法(这不是存储在 cookie 中,而是存储在服务器上的 PHP 类文件中)。

有人可以更改序列化对象的类并正确猜测导致__wakeup函数执行某些任务吗?是的。通常__wakeup函数会简单地重新连接到一个资源,所以这可能是也可能不是什么大问题,但为什么要冒险呢?只需将数组存储为 JSONjson_encode($yourdata)并使用json_decode($cookiedata, true)

只要存储在客户端的数据不构成安全风险(即泄露敏感信息)就可以了。为此,存储用户的收藏夹可能是合适的,特别是如果它是一个高流量站点,并且您不想为此类数据执行数据库获取或长时间会话。

于 2013-09-24T22:38:53.543 回答
0

我正在考虑的方式是加密cookie信息,以防止用户知道他/她到底在编辑什么

于 2013-09-24T22:26:19.193 回答
-1

如果您不希望用户可能修改数据,那么首先不要将数据提供给用户。使用$_SESSION、数据库或将信息写入服务器上的文件。

于 2013-09-24T22:49:08.403 回答