我需要将结构化数据存储在cookie中
一些目录页面的最爱。数据为{ {id,type} , {id,type} , ... }
在我的代码中,我需要把它放回一个数组。所以我使用unserialize()
函数来恢复数据
有没有办法防止物体注入? unserialize函数的任何替代方法?
答案 0 :(得分:1)
好吧,如果你有一个定义的数组结构的结构,那么只要确保你反序列化的字符串实际上是一个数组,只需检查值类型(id - > int,type - > string)。
另外,我认为json_encode在您的数据情况下会更好,它的尺寸更小,解码速度更快(您可以在客户端使用它)。
答案 1 :(得分:1)
有没有办法阻止对象注入
当您反序列化一个对象时,PHP将调用类定义中的__wakeup
方法(这不存储在cookie中,而是存储在服务器上的PHP类文件中)。
有人可以更改序列化对象的类并正确猜测导致__wakeup
函数执行某项任务吗?是。通常__wakeup
函数只会重新连接到一个资源,所以这可能是也可能不是一个大问题,但为什么要冒这个风险呢?只需将数组存储为json_encode($yourdata)
的JSON,然后使用json_decode($cookiedata, true)
只要存储在客户端的数据不会带来安全风险(即显示敏感信息),就可以了。存储用户的收藏夹可能适用于此,特别是如果它是高流量站点并且您不希望必须为此类数据执行数据库提取或长会话。
答案 2 :(得分:0)
我正在考虑的方法是加密cookie信息,以防止用户知道他/她编辑的是什么
答案 3 :(得分:-1)
如果您不希望用户可能修改数据,则不要首先将数据提供给用户。使用$_SESSION
,数据库,或将信息写入服务器上的文件。