【问题标题】:Using Cookies with cURL将 Cookie 与 cURL 一起使用
【发布时间】:2010-11-08 17:35:17
【问题描述】:

我正在使用 cURL 远程登录网站,一切正常。我正在发布登录信息、检索 cookie 并被远程站点重定向。我对 cookie 的实际运作方式有几个疑问。

    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, 'https://website' );
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, TRUE);
    curl_setopt($ch, CURLOPT_POST, TRUE);
    curl_setopt($ch, CURLOPT_POSTFIELDS, $post_str);
    curl_setopt($ch, CURLOPT_COOKIEJAR, '/php/cookies.txt');
    curl_setopt($ch, CURLOPT_COOKIEFILE, '/php/cookies.txt');
    $result = curl_exec($ch);
    $x = curl_getinfo($ch);
    print_r($x);

1.) 通过 POST 发送登录信息是否需要注意一些安全问题?

2.) 当我将 curlopt_cookiejar 设置为 /php/cookies.txt 时,我实际上并没有看到该文件保存在任何地方。这可能是由于权限,但登录仍然有效。为什么会这样?允许写入和保存此文件的正确权限是什么?

3.) 以纯文本形式存储 cookiejar 文件是否安全?保存此文件的最佳位置是什么?

4.) 如果这个脚本被多个用户定期使用,是什么阻止了位于 cookies.txt 中的正确 cookie 信息(使用curlopt_cookiefile 发送回服务器)被其他已写入的 cookie 混淆在这个文件中?处理过期 cookie 并从该文件中删除旧 cookie 的最佳方法是什么?

这显然是 cURL 的一个非常重要的功能,但我似乎无法在任何地方找到这些答案。我希望 cURL 大师可以一劳永逸地解决这些问题。

【问题讨论】:

    标签: php cookies curl


    【解决方案1】:

    1) 没有

    2)
    2.0) 它正在写入 /php - 也就是说,在根文件系统之外,在文件夹 php 中。你在那里查过吗?
    2.1) cookiejar 将仅用于不发布登录信息的后续请求。在这一点上,我想知道你使用 cookiejar 是为了什么……你确定你甚至需要这些 cookie 吗?他们(不应该)被发送到您被重定向到的第三方网站,那么他们在做什么?
    2.2) 运行 PHP 的用户(通常是 Web 服务器)需要对该文件的写权限。

    3) 只要您将 cookiejar 放在您的文件系统中其他人无法任意访问的某个位置,您应该没问题 - 例如,您可能希望将它放在 webroot 之外的某个位置。

    4) 如果这个脚本经常被多个用户使用,您几乎肯定会在该文件中获得所有不同类型数据的混合——这表明您可能应该为每个用户提供他们自己的 cookiejar 文件或其他东西...由于该位置只是通过 PHP 字符串设置的,因此弄清楚如何使其动态化应该不会有太多麻烦。 CURL 将注意在后续请求和响应期间不会将过期的 cookie 写入 jar。

    【讨论】:

    • 2.0 - 我在那里检查过,但没有写入任何文件。我认为这是由于该文件夹没有完整的写入权限。允许写作的最安全方法是什么?我读了很多关于 CHMOD 777 不是一个好主意的东西..
    • 2.1 - 如果远程站点的 cookie 在标题中,登录只会重定向到正确的页面,否则它会将我注销。 2.2 - 你能告诉我如何在不授予文件夹 777 权限的情况下允许对服务器的写权限吗?这是我需要通过root访问做的吗? 3 - 我可以使用这样的路径吗? /../folder_out_of_webroot/ 4 - 也就是说cookies.txt文件过期后会自动删除?
    • 向 curl 将运行的进程授予写入权限的最不许可的方式是从 PHP 获取 uid/gid(通过 phpinfo()),将 cookiejar 分配给该用户,然后然后将其设为 0700(即“所有者的所有权利,其他任何人都没有任何权利”)。
    • cookies.txt 不会被删除 - 它会在每个请求上重写 cookies.txt,只放入未过期的 cookie。我会如果没有未过期的 cookie,它将是一个零字节文件,但我不确定 - 可能会留下某种填充。
    • 您可以根据需要指定“在 webroot 之外”的路径 - PHP 不会介意,并且您不告诉 curl 它所在的位置会导致它突然在网络根。
    猜你喜欢
    • 2011-04-01
    • 2016-02-14
    • 2015-08-26
    • 2016-06-26
    • 1970-01-01
    • 2011-09-03
    • 2018-02-01
    • 2014-03-06
    • 1970-01-01
    相关资源
    最近更新 更多