【问题标题】:Is it safe to store an array in a cookie?将数组存储在 cookie 中是否安全?
【发布时间】:2012-10-12 01:49:31
【问题描述】:

我有一个脚本,它使用数组来打乱它们,然后将它们存储到一个 cookie 中,这样用户只会对数组进行一次打乱。

这是脚本:

$shufflecookie = $_COOKIE['shuffle'];
                
if (isset($_COOKIE['shuffle'])) {
  $items = unserialize(gzuncompress(base64_decode($shufflecookie)));
}
else {
  shuffle($items);
  $items_serialized = base64_encode(gzcompress(serialize($items)));
  setcookie("shuffle", $items_serialized, 0, "/");
}

这样做安全吗?或者也许有更好的方法来存储这些数据?谢谢

UPD。感谢您的帮助。我所做的只是用会话替换cookie。所以新代码是:

$shufflecookie = $_SESSION["shuffle"];
                
if (isset($_SESSION["shuffle"])) {
  $items = unserialize(gzuncompress(base64_decode($shufflecookie)));
}
else {
  shuffle($items);
  $items_serialized = base64_encode(gzcompress(serialize($items)));
  $_SESSION["shuffle"] = $items_serialized;
}

【问题讨论】:

  • Define 'safe'...如果用户有数据,就可以解密数据。
  • 这听起来有点像缓存。您是否查看过 APC 或 memcached 等实际缓存解决方案?
  • 用户可以禁用cookie,记住这一点。
  • 如果用户禁用 cookie 也没问题。他们只是不会得到随机数组。能不能给字符串加盐,让用户在不知情的情况下无法解密?这样我就可以在服务器端解密它,因为我会知道盐?
  • 您可以在会话中保存不同的排列。 session_start(); // 存储会话数据 $_SESSION['shuffle'] = $shuffledArray;这比使用 cookie 更安全,但原则上黑客仍然可以劫持会话并以这种方式访问​​数据。取决于您的数据的敏感程度。

标签: php arrays security cookies


【解决方案1】:

自从提出问题后,您似乎已经用次要答案更新了问题。

在 cookie 中存储数据的一个缺点是它以明文形式存储在客户端电脑上(除非首先加密的服务器端)。即使您确实加密了数据,用户也总是有可能设法解密它。取决于 cookie 的生存时间,cookie 也有可能在浏览器的生命周期之后仍然存在(即关闭后)。这引入了一种可能性,即在稍后请求页面时将 cookie 中的数据发送回服务器之前,可能不是您的客户端更改了 cookie 中的数据。

另一方面,将信息存储在会话中有助于确保信息存储在服务器端并阻止客户端查看此信息。通常在使用会话时,您只需将会话 ID 存储在 cookie 中即可识别用户属于哪个会话。

因此,任何应该安全的数据都应该保存在会话而不是 cookie 中。

【讨论】:

    猜你喜欢
    • 2011-01-07
    • 2016-05-07
    • 1970-01-01
    • 2020-12-20
    • 2010-12-19
    • 2011-07-11
    • 2010-12-06
    • 1970-01-01
    • 2021-07-15
    相关资源
    最近更新 更多