【问题标题】:Anatomy of a cookie饼干的解剖
【发布时间】:2012-09-13 03:31:21
【问题描述】:

我是 cookie 的新手。试图了解用户登录时我的网站设置的这个 cookie 的结构。我正在使用 Yii 在 PHP 中构建,我还在 config 中启用了 cookie 验证。只是想确保它是否正常工作(设置了HMAC 令牌)以及我是否对任何漏洞持开放态度。

dd3b7ffe10018a899b39986a9d94dfd3b64e7e4as:248:"05035a5ae619356a622ed6ed805b6695a4fd6c44a:4:{i:0;s:18:"mjkvj003@gmail.com";i:1;s:3.18:"mjkvj0"mjkvj0 :604800;i:3;a:4:{s:6:"userid";s:2:"10";s:8:"用户名";s:18:"mjkvj003@gmail.com";s: 4:"类型";s:10:"诊断";s:6:"状态";s:7:"待定";}}";

cookie 名称本身是一个随机的 32 个字符的字母数字序列。我还有一个单独存储会话 ID 的 phpsession cookie。这里mjkvj003@gmail.com 是用户名,类型和状态是应用程序相关变量。 我认为 cookie 使用 = 分配值,但在这里我看到 : 正在使用。这是正确的吗?

【问题讨论】:

    标签: php security cookies yii


    【解决方案1】:

    这不是 cookie 的内容。它是 PHP 的 $_SESSION 内容的序列化表示,它是通过在该数组上调用 serialize 生成的。

    cookie 本身仅包含会话 id,它让 PHP 知道哪些序列化会话数据到 unserialize 并作为 $_SESSION 提供给您的脚本。

    【讨论】:

    • 那么'i'必须是数组索引吗? 'a:4:' 指的是什么?在开始大括号之前已经使用了两次?
    • a:4 表示后面跟着一个有 4 个元素的数组。 i:0:s:18:"..." 表示数组的第一个元素有一个整数键0,它的值是一个长度为18 的字符串,其内容如下等。这就是serialize 的工作原理。使用 var_dumpserialize 查看值如何映射到序列化表示。
    • 这解释了很多!但我仍然不明白第一行,我的 php 会话 ID 与第一行中给出的字符串相去甚远。还有中间线的这个特殊部分:'i:2;i:604800;i:3;a:4:'
    • @VarunJain:第一行写的没有意义,所以在某处存在复制粘贴问题。其余请参考unserialize.net
    • 我认为第一行可能只是 yii 设置的 HMAC 令牌。感谢您的时间和帮助!
    【解决方案2】:

    第一行是 Yii 设置的 HMAC 令牌。翻遍框架文件,发现他们设置了令牌,还序列化了 cookie 数据。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-04-05
      • 2015-06-06
      • 2010-09-15
      • 2016-03-21
      • 2010-10-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多