防止Safari缓存热门站点

时间:2010-07-14 08:32:14

标签: php caching safari

我发现我认为Safari的Top Sites图像缓存存在很大的安全漏洞。对于那些不知道的人,Safari基本上会对您访问的每个页面进行快照,这应该对用户有所帮助。我的问题是它甚至拍摄了我的网站部分密码保护的快照。因此,如果某人掌握了我的一个用户的计算机并知道在哪里查看,他们就会拥有一整套内容,理论上这些内容应仅供我的用户使用。

我在其他网站上测试了此“功能”,发现Gmail和Hotmail等网站无法缓存。好吧,只有hotmail登录页面被缓存但除此之外什么都没有,而且根本没有任何Gmail被缓存。所以我的问题是:为了防止这种情况发生,我能做些什么呢?我已经使用

阻止了FF,IE,Opera等中的正常缓存
header('Cache-control: no-store, no-cache')

以及pragma:no-cache,以及本书中用于阻止页面缓存的所有其他技巧。是什么给了什么?

4 个答案:

答案 0 :(得分:2)

更新:对于阅读此内容的任何人:这仍然是一个未解决的问题。我甚至联系了Safari开发团队,他们只是让我跑来跑去。

@Kieran Allen

这是您要求我提供的代码的结果:

Headers sent

array(7) {
  [0]=>
  string(23) "X-Powered-By: PHP/5.2.2"
  [1]=>
  string(38) "Expires: Mon, 26 Jul 1997 05:00:00 GMT"
  [2]=>
  string(50) "Cache-Control: no-store, no-cache, must-revalidate"
  [3]=>
  string(16) "Pragma: no-cache"
  [4]=>
  string(40) "Cache-Control: post-check=0, pre-check=0"
  [5]=>
  string(44) "Last-Modified: Wed, 14 Jul 2010 09:32:56 GMT"
  [6]=>
  string(23) "Content-type: text/html"
}

我目前的理论是Safari使用https禁用安全网站上的快照。

(我知道回答这个问题不是正确的协议,但是当我问这个时我不是注册会员。我在最后一小时内注册了,并且认为我可以申请这个问题就像我自己的问题,但是Stack Overflow不允许这样做。)

答案 1 :(得分:1)

This site is all you want

if ( $_SERVER["HTTP_X_PURPOSE"] == "preview" ) {
    // Do something for safari top sites
} else {
    // Do something for all navigators
};

答案 2 :(得分:0)

您是否尝试过添加随机查询字符串?

应该起作用的标题(全部在一起):

// A really far back date...
header('Expires: Mon, 26 Jul 1997 05:00:00 GMT');

// Dynamic Modified date
header('Last-Modified: ' . gmdate('D, d M Y H:i:s') . ' GMT');

// HTTP 1.0 (i think)
header('Pragma: no-cache');

// HTTP 1.1 
header('Cache-Control: no-store, no-cache, must-revalidate');
header('Cache-Control: post-check=0, pre-check=0', false);

编辑:

尝试在发送上述标题后进行调试。

if (headers_sent())
{
   echo '<h1>Headers sent</h1>';
   echo '<pre>';
   var_dump(headers_list());
   echo '</pre>';
}
else
{
   echo '<h1>Headers not sent</h1>';
   echo '<pre>';
   var_dump(headers_list());
   echo '</pre>';  
}

您可以使用上述输出编辑您的帖子吗?

谢谢!

答案 3 :(得分:0)

发送2个缓存控制头可能没有帮助 - 尝试合并它们。我还建议使用'Vary:Cookie'标题作为经过身份验证的页面的良好做法。

您是否查看过您所说的未缓存的hotmail和google页面中的标题?

下进行。