Предотвратить Safari от кэширования лучших сайтов - PullRequest
2 голосов
/ 14 июля 2010

Я обнаружил, как мне кажется, большой недостаток безопасности в кэше изображений Safari Top Sites. Для тех, кто не знает, Safari делает снимок каждой страницы, которую вы посещаете, и это должно быть как-то полезно для пользователя. Моя проблема в том, что он даже делает снимки частей моего сайта, которые защищены паролем. Так что, если кто-то захватит один из компьютеров моего пользователя и будет знать, где искать, у него будет целый репозиторий контента, который теоретически должен быть только для глаз моего пользователя.

Я протестировал эту "функцию" на других сайтах и ​​обнаружил, что такие сайты, как Gmail и hotmail, не кэшируются. Ну, кешируется только страница входа в Hotmail, но ничего кроме этого, и ни один из Gmail не кешируется вообще. Поэтому мой вопрос таков: что я могу сделать со своей стороны, чтобы этого не случилось? Я уже запретил нормальное кэширование в FF, IE, Opera и т. Д. С помощью

header('Cache-control: no-store, no-cache')

вместе с прагмой: отсутствие кэширования и все остальные хитрости в книге, чтобы предотвратить кэширование страницы. Что дает?

Ответы [ 4 ]

2 голосов
/ 14 июля 2010

ОБНОВЛЕНИЕ: Для всех, кто читает это: Это все еще нерешенная проблема. Я даже связался с командой разработчиков Safari, и они просто устроили мне беготню.

@ Киран Аллен

Это результат кода, который вы просили меня включить:

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.

(Я знаю, что это неправильный протокол, чтобы отвечать этим как ответом на мой вопрос, но когда я спросил об этом, я не был зарегистрированным пользователем. Хотя я зарегистрировался в течение последнего часа и подумал, что смогу потребовать этот вопрос как мой, но, увы, переполнение стека не позволяет этого.)

1 голос
/ 28 марта 2013

Этот сайт - все, что вы хотите

if ( $_SERVER["HTTP_X_PURPOSE"] == "preview" ) {
    // Do something for safari top sites
} else {
    // Do something for all navigators
};
0 голосов
/ 14 июля 2010

Отправка 2 заголовков управления кешем, вероятно, не помогает - попробуйте объединить их. Я также рекомендовал бы заголовок «Vary: Cookie» в качестве хорошей практики для аутентифицированных страниц.

Посмотрели ли вы заголовки, которые вы получаете от страниц Hotmail и Google, которые, как вы говорите, не кэшируются?

С

0 голосов
/ 14 июля 2010

Вы пытались добавить случайную строку запроса?

Заголовки, которые должны работать (все вместе):

// 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);

РЕДАКТИРОВАТЬ:

Попробуйте поставить это для некоторой отладкиПОСЛЕ ТОГО, КАК вы отправляете вышеуказанные заголовки.

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

Заголовки не отправлены

';echo '
';
   var_dump(headers_list());
   echo '
';}

Можете ли вы отредактировать свое сообщение с выводом выше?

Спасибо!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...