我发现我认为Safari的Top Sites图像缓存存在很大的安全漏洞。对于那些不知道的人,Safari基本上会对您访问的每个页面进行快照,这应该对用户有所帮助。我的问题是它甚至拍摄了我的网站部分密码保护的快照。因此,如果某人掌握了我的一个用户的计算机并知道在哪里查看,他们就会拥有一整套内容,理论上这些内容应仅供我的用户使用。
我在其他网站上测试了此“功能”,发现Gmail和Hotmail等网站无法缓存。好吧,只有hotmail登录页面被缓存但除此之外什么都没有,而且根本没有任何Gmail被缓存。所以我的问题是:为了防止这种情况发生,我能做些什么呢?我已经使用
阻止了FF,IE,Opera等中的正常缓存header('Cache-control: no-store, no-cache')
以及pragma:no-cache,以及本书中用于阻止页面缓存的所有其他技巧。是什么给了什么?
答案 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)
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页面中的标题?
下进行。