2010-07-14 139 views
2

我發現我認爲與Safari的熱門網站圖像緩存有很大的安全漏洞。對於那些不知道的人來說,Safari基本上會爲你訪問的每一頁提供一個快照,這對用戶來說應該是有用的。我的問題是,它甚至會拍攝我的網站部分受密碼保護的快照。因此,如果有人抓住了我的用戶電腦之一,並知道在哪裏尋找,他們會擁有一個完整的內容存儲庫,理論上應該僅供我的用戶使用。防止Safari從緩存熱門網站

我測試了這個「功能」與其他網站,發現諸如Gmail和Hotmail的網站不會被緩存。那麼,只有hotmail登錄頁面才能被緩存,但除此之外沒有任何一個Gmail會被緩存。所以我的問題是這樣的:我可以做什麼來防止這種情況發生?無緩存,並在書中所有其他伎倆被緩存停止頁面:我已經使用

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

與編譯一起防止FF,IE,Opera等正常緩存。是什麼賦予了?

+0

有一個在我的代碼一個錯字:通過內容類型我的意思是緩存控制。抱歉。 – vince 2010-07-14 08:41:03

+1

編輯你的文章以反映這一變化 – mdb 2010-07-14 09:30:31

回答

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>'; 
} 

你可以用上面的輸出編輯你的文章嗎?

謝謝!

+0

我在我的代碼中有第1條第3和第4條語句。我添加了另外兩個你建議的,但它沒有什麼區別:( – vince 2010-07-14 08:46:05

+0

你是否檢查過服務器實際上發送了哪些頭文件?你可能會發送一些etags文件,並且確保你沒有任何覆蓋。 hatccess緩存方法。如果這些都不起作用,你可以在你發送頭文件的地方附上代碼嗎?使用page.php?cb = <?php echo uniqid()將一個隨機數字附加到每個「登錄」 ;?> – 2010-07-14 09:23:54

+0

OT,但不是'echo'

'; var_dump(headers_list()); echo '
';'在最後一個樣本中有重複?可以從if和else中取出,並且放在後面 – Svish 2010-07-14 09:46:08

2

更新:對於閱讀此內容的任何人:這仍然是一個未解決的問題。我甚至聯繫了Safari開發團隊,他們只是讓我跑來跑去。

@Kieran艾倫

這是你叫我包括代碼的結果:

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瀏覽器禁用使用H​​TTPS安全網站的快照。

(我知道這不是一個正確的協議來回答這個問題作爲我的問題的答案,但是當我問到這個問題時,我不是一個註冊成員,儘管我在最後一個小時內註冊了,並且認爲我能夠聲稱這個問題是我自己的,但唉Stack Overflow不允許這樣做。)

+0

是的,可以是HTTPS - 我想你唯一的解決方法是在網址末尾附加一個隨機字符串 – 2010-07-14 13:05:39

+0

我不認爲隨機字符串有所作爲...在測試了幾個我發現的網站之後該Facebook也做不會被緩存(除了登錄頁面)。臉書不完全是一個安全的網站,所以我想知道他們在做什麼,以防止這種情況發生。 myspace也是一樣。 – vince88 2010-07-14 19:14:10

+0

這篇文章幫了我很多。爲什麼?因爲,我昨天試圖阻止Safari瀏覽器緩存,並意識到「特殊醬」是「HTTPS」。如果在HTTPS上進行測試,這不會被報告爲錯誤。我很惱火,但鬆了一口氣。這應該是最好的答案。 – 2010-11-18 18:45:49

0

發送2個緩存控制頭可能沒有幫助 - 嘗試合併它們。我還會推薦一個'Vary:Cookie'標頭作爲驗證頁面的良好實踐。

你看過你從Hotmail和谷歌頁面得到的標題,你說沒有被緩存?

C.

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 
};