1

我在我网站的产品页面上创建了一个库存检查器。它由一个 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);
...
}

我要连接的 url 是我的供应商网站,它要求我登录才能访问他们的库存页面。这些页面只能通过 http 访问。我复制了供应商站点发送的 cookie,并将过期日期设置为 0。cookie 包含一个 ASP.NET SessionId。

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

4

3 回答 3

0

第一步,https://用于您的 ajax 调用。除非您在供应商的服务器上有能够解密自定义加密的代码(假设您对您的 cookie 数组进行 JSON 编码,然后使用 mcrypt 对其进行加密 - 然后在供应商站点上解密并重建),否则您将受制于供应商端的 RESTful API。如果他们不需要 SSL,那么您就是一种 SOL。

于 2012-10-04T19:26:31.697 回答
0

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

如果他们只允许通过 HTTP 访问它,也许您应该与他们讨论投资 SSL 证书......即使它是自签名证书(这样做提供加密,但不验证身份另一端的服务器,因此大多数浏览器都会认为它不安全,即使流量仍然是加密的)。如果您的供应商只提供 HTTP,他们就会让自己受到攻击,尤其是在涉及任何类型的会话 id 的情况下。

于 2012-10-04T19:27:54.497 回答
0

您真的是指您通过 HTTP 而不是 HTTPS 访问您的库存供应商吗?

如果是这样,那么无论如何您都无法使用 cookie,因为整个通信是不安全的,并且可以随意嗅探或拦截 - 如果您担心这一点,就没有任何帮助。

另一方面,cookie 本身通常由服务器设置,并且有两个可用选项:1)httponly 2)安全。

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

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

你的 curl 是浏览器。你的 curl 没有 javascript,所以第一个选项没用。即使这样,您的 curl 也必须知道应该设置哪个 cookie,并且您可以轻松地忽略服务器不希望将其提供给 Javascript。

仅当您对其进行编程时,您的 curl 才会发回 cookie。如果您认为使用不安全的通道是个好主意,那么安全标志不会阻止您这样做,但它不会为 cookie 本身增加安全性。

Cookie 值在通信双方始终未加密。通过使用 HTTPS 添加了唯一的针对嗅探的安全性。有关 cookie 选项的任何其他内容只是为了保护浏览器的行为,以降低 cookie 被不应该知道的第三方知道的风险。

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

于 2012-10-04T21:45:31.707 回答