使用curl时如何保护cookie?

时间:2012-10-04 19:19:48

标签: php curl session-cookies

我在网站的产品页面上创建了一个清单检查器。它由一个AJAX提交按钮组成,点击该按钮后,使用以下curl函数检索产品的库存:

function inventory($sku) {
  $url = 'http://www.example.com/product/' . $sku;
  $curl = curl_init($url);
  $referer = 'http://www.google.com/search';
  curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
  curl_setopt($curl, CURLOPT_COOKIEFILE, '/cookie.txt'); 
  curl_setopt($curl, CURLOPT_REFERER, $referer);
  curl_setopt($curl, CURLOPT_FOLLOWLOCATION, false);
  curl_setopt($curl, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US)AppleWebKit/534.10 (KHTML, like Gecko) Chrome/8.0.552.224 Safari/534.10');
  $html = curl_exec($curl);
  curl_close($curl);
...
}

我要连接的网址是我的供应商网站,要求我登录才能访问其广告资源页面。这些页面只能通过http访问。我复制了供应商网站发送的cookie,并将截止日期设置为0.该cookie包含一个ASP.NET SessionId。

我有办法保护cookie吗?如果没有,那么在我的登录下劫持cookie并访问我的供应商网站是多么容易。根据我的理解,中间人攻击必须来自我的服务器和供应商服务器之间的某个人。这是对的吗?

3 个答案:

答案 0 :(得分:0)

第一步,使用https://进行ajax调用。除非您在供应商的服务器上有能够解密自定义加密的代码(假设JSON编码您的cookie阵列,然后使用mcrypt加密它 - 然后在供应商网站上解密和重建),那么您将受到供应商端的RESTful API。如果他们不需要SSL,那么你就是SOL。

答案 1 :(得分:0)

保护任何HTTP流量的最简单方法是使用HTTPS。通过将整个事物包装在SSL中,在不解密请求的情况下唯一可见的是请求的域名。

如果他们只允许通过HTTP访问它,也许您应该与他们讨论投资SSL证书...即使它是自签名的(以这种方式提供加密,但不验证在另一端的服务器的身份,所以大多数浏览器将投入一个关于它是不安全的,即使流量仍然加密)。由您的供应商仅提供HTTP,他们正在打开攻击,特别是涉及任何类型的会话ID。

答案 2 :(得分:0)

您是否真的想通过HTTP访问您的库存供应商,而不是HTTPS?

如果是这样的话,无论如何你都无法对cookie做任何事情,因为整个沟通都是不安全的,可以随意嗅闻或截获 - 如果你担心这个,就没有帮助。

另一方面,cookie本身通常由服务器设置,有两个选项:1)httponly 2)secure。

1)httponly告诉浏览器不要让这个cookie可用于Javascript,而只是在下次请求时通过HTTP发回它,直到它过期。

2)安全告诉浏览器不要通过未加密的通信发送cookie,即只通过HTTPS发送,而不是HTTP。

你的卷曲是浏览器。你的curl没有javascript,所以第一个选项没用。即便如此,你的curl必须知道应该设置哪个cookie,你可以很容易地忽略服务器不希望它可用于Javascript。

只有在您编程时,您的curl才会发回cookie。如果您认为使用不安全的渠道将是一个好主意,那么安全标志不会阻止您这样做,但它不会增加cookie本身的安全性。

Cookie值始终在通信的两端都未加密。使用HTTPS添加了防止嗅探的唯一安全性。关于cookie选项的任何其他内容仅用于保护浏览器的行为,以降低cookie不知道的第三方知道cookie的风险。

发送回cookie时,没有可添加的选项。