【问题标题】:How to store a cookie fetched by CURL such that it can be accessed by a page loaded in an iFrame如何存储 CURL 获取的 cookie,以便 iFrame 中加载的页面可以访问它
【发布时间】:2011-03-16 17:56:50
【问题描述】:

我有一种情况,当页面加载时,我会发送一些身份验证数据(在本例中为关联数组$data),这些数据由另一个域上的脚本验证。代码如下:

$cookie_path = 'cookies.txt';

    $ch = curl_init();

    curl_setopt($ch, CURLOPT_URL, 'http://www.mysite.com/verify');
    curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
    curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie_path);
    curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_path);
    curl_setopt($ch, CURLOPT_COOKIESESSION, true); 
    $result = curl_exec($ch);

站点然后设置一个会话(在这种情况下,我使用 codeigniter 框架,会话设置如下:$this->session->set_userdata('logged_in', true);

但是,当我在 iframe 中加载外部站点时,它似乎无法检测到会话已设置并重定向到登录页面。

如何确保我的会话 cookie 被正确发送并且可以被 iframe 访问?

【问题讨论】:

  • 如果 Joe Hacker 可以在您正在阅读“attackme.net”上的页面时在您的机器上为“yourbank.com”随机设置一个 cookie,那不是很好。想象一下,他可以为您的帐户带来多少乐趣。

标签: php session codeigniter cookies curl


【解决方案1】:

您的 curl 脚本正在服务器端运行并将第二个站点的 cookie 存储在那里,但您的浏览器正在客户端中加载第二个站点。您可以跨域共享 cookie。

如果您控制试图在其上创建会话的站点,则可以将会话 ID 传递给 PHP 脚本,然后动态生成 iframe URL,包括将会话 ID 作为查询字符串,例如:

http://www.brainbell.com/tutors/php/php_mysql/Encoding_the_session_ID_as_a_GET_variable.html

编辑 澄清一下,如果您控制第二个站点上的脚本,您可以修改它以将经过身份验证的会话的 SESSIONID 提供给您的 CURL 脚本,然后发出 cURL 请求的 PHP 脚本可以将其合并到动态生成的 iFrame src URL 中。

【讨论】:

  • 您不能在完全不同的域之间共享 cookie。那将是一个巨大的安全漏洞。不过,您可以在不同的子域之间共享 cookie。 en.wikipedia.org/wiki/HTTP_cookie#Domain_and_Path
  • 您的建议是在服务器之间共享数据。
  • 那么当cURL请求一个URL时,页面是在服务器端加载的,cookie存储在生成服务器上,而不是正常的请求服务器上?
  • cookie 将存储在发出请求的机器上,在这种情况下,是发出 cURL 请求的服务器。问题是您希望在客户端 Web 浏览器上进行身份验证,因此您需要避开 cookie 模型并在 iFrame 中告诉域您已经通过其他方式进行了身份验证,例如在 iframe src URL 中包含 SESSID。
【解决方案2】:

您可以通过以下方式设置 cookie:

http://php.net/manual/en/function.setcookie.php

但是,您不能为脚本域之外的域设置 cookie。

【讨论】:

    猜你喜欢
    • 2012-10-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-13
    • 1970-01-01
    • 2014-06-10
    • 1970-01-01
    • 2017-07-25
    相关资源
    最近更新 更多