【问题标题】:when are cookies sent from the user?用户何时发送 cookie?
【发布时间】:2011-09-27 04:29:51
【问题描述】:

我有一个有函数的类,比如说class.php:

class fun {
public function get_cookie() {
$old_cookie = $_COOKIE['mycookie'];
}
public function ssl() {
//redirect from http to https
}

在另一个 php 文件中,比如说 index.php:

//include fun class
$fun = new fun;
$fun->ssl();
$fun->get_cookie();

我的问题是,由于函数 get_cookie 在 $fun->ssl() 之后,用户是否发送加密的 cookie?还是因为 cookie 代码是在 $fun->ssl() 执行之前编码的,所以 cookie 是在未加密的情况下发送的?

【问题讨论】:

    标签: php cookies ssl


    【解决方案1】:

    切勿通过需要加密的 cookie 发送任何内容。

    无论对此处提出的实际问题的回答如何,您的 cookie 的内容都应被视为可公开访问且不安全。

    首先,网站的整个 cookie 集随每个网络请求一起发送(双向)。因此,即使您在此特定请求中成功使用 SSL 对它们进行了加密,用户只需要对您网站上的图像发出纯 HTTP 请求,他就会传输它们并将它们以未加密的形式发回。

    其次,cookie 在站点之间泄漏并非闻所未闻。存在许多跨站点脚本攻击,可以允许第三方获取您用户的 cookie。即使它们是通过 SSL 发送的,它们也不会加密存储在用户的机器上。

    所以我将再次重复我最初的声明:永远不要通过 cookie 发送任何您需要确保安全的内容。

    【讨论】:

      【解决方案2】:

      Wikipedia article 很好地解释了 cookie 的工作原理。基本上,cookie 与请求标头一起发送。因此,除非通过HTTPS 建立连接,否则 cookie 会以明文形式发送。

      【讨论】:

        【解决方案3】:

        cookie 在您的代码运行之前发送。 PHP 读取标头,填充全局变量 $_COOKIE[],然后执行您的代码。因此,如果有人使用 HTTP 发出请求,他会得到未加密的 cookie。

        当您创建 cookie 时,您可以定义 cookie 仅发送到使用 HTTPS 请求的页面。您可以使用带有$secure 参数的函数session_set_cookie_params()setcookie() 执行此操作。如果使用 HTTP 请求页面,则不会发送此类 cookie。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2014-11-15
          • 2016-08-23
          • 2018-04-16
          • 2013-07-18
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多