頁面緩衝 - PHP中如何禁用使用者本地瀏覽器緩衝?

來源:互聯網
上載者:User

題境:企業內部一些檔案,通過flexpaper線上瀏覽,原本的office檔案都轉化成了swf格式,而公司這些檔案是只允許員工線上瀏覽,不允許複製、列印與傳播的,如果本機快取(臨時)檔案夾中包含這個swf檔案,就可以直接拿走並傳播了(即使不能完全控制住,但如果達到IE臨時檔案夾中沒有隨意緩衝此檔案的話,也能一定程度上達到效果)

我希望使用者本地IE臨時檔案夾不能緩衝某頁面的內容,尋找資料一般都是php中header控制,html中meta控制,然後我也試用了,結果都沒達到效果,在IE對應的本機快取檔案夾中還是可以找到該頁面的內容,請各位幫忙指點一下,謝謝了

回複內容:

題境:企業內部一些檔案,通過flexpaper線上瀏覽,原本的office檔案都轉化成了swf格式,而公司這些檔案是只允許員工線上瀏覽,不允許複製、列印與傳播的,如果本機快取(臨時)檔案夾中包含這個swf檔案,就可以直接拿走並傳播了(即使不能完全控制住,但如果達到IE臨時檔案夾中沒有隨意緩衝此檔案的話,也能一定程度上達到效果)

我希望使用者本地IE臨時檔案夾不能緩衝某頁面的內容,尋找資料一般都是php中header控制,html中meta控制,然後我也試用了,結果都沒達到效果,在IE對應的本機快取檔案夾中還是可以找到該頁面的內容,請各位幫忙指點一下,謝謝了

我在 IE 對應的本機快取檔案夾中還是可以找到該頁面的內容

在快取檔案夾中找到很正常。

至於你的問題「如何禁用使用者本地緩衝」,可以把快取檔案夾設定為唯讀。別笑,我很正經的。

你只看了 header,為什麼不看看 Status Code 啊?如果是 304,則表示 Not Modified,說明被緩衝了。

如果被緩衝了,會不會在本機快取檔案夾中找到呢?答案是可能會。

本地緩衝是瀏覽器的功能,可以不用去管。

禁用緩衝的目的是:當你去請求 web server 時,server 總是把最新的檔案給出瀏覽器,而不用檢測這個檔案是否更新過。當他傳回瀏覽器的時候,瀏覽器 IE 就把這個檔案(或者一部分)放到本地存起來。

雖然這個檔案夾被稱為「快取檔案夾」,其實他只是是「臨時檔案夾」。

其它瀏覽器也許不使用「快取檔案夾」,比如使用一個小型資料庫系統,例如 sqlite。

其實,把記憶體的內容放到硬碟上,是一種傳統,也是一種哲學。

作業系統也經常把一些記憶體放到硬碟裡,「微軟」管它叫「虛擬記憶體」。

最後回答作者的問題:如何禁用本機快取?沒必要。

我非要禁用。

  1. 設定為唯讀
  2. 在 IE 的設定裡面應該可以禁用
  3. 修改註冊表

按照補充,給出我的看法:

在這種環境下,你需要的肯定是一個需要用戶端配合的程式,用來對瀏覽器的行為進行修改,而不是單純在伺服器端進行開發。

如果簡單點考慮,你可以為瀏覽器開發外掛程式,用來修改和約束瀏覽器的緩衝行為。然後在伺服器端上,要求只有安裝了你的外掛程式才能提供內容。但這種方法仍然有被HTTP抓包的風險。內賊難防,千萬不要認為一定程度的安全就夠用了。

我覺得比較好的方案是直接放棄Web應用這個架構,而用用戶端軟體去替代之。內容格式上,也放棄flash,而只是簡單的傳輸帶浮水印的中低解析度映像。在網路傳輸上,引入不對稱式加密。這樣只要伺服器的私密金鑰不泄露,可以說固若金湯,任何人都拿不到印刷品質的檔案原文。

但這仍然防止不了截屏、錄影、拍照,甚至更簡單點:人肉記憶等種種原因造成的資料泄露。這些方式我不多解釋,就認栽吧。

感謝邀請。的確,正面對抗緩衝系統,妄圖更改所有使用者的瀏覽器設定,確實是件荒謬的事情。但這件事並非沒有變通的方法。

有個細節,就是帶有POST資料的HTTP請求,一般而言是不緩衝的。RFC 2616的9.5 POST一節,有如下的注釋:

Responses to this method are not cacheable, unless the response includes appropriate Cache-Control or Expires header fields. However, the 303 (See Other) response can be used to direct the user agent to retrieve a cacheable resource.

其實也很容易理解:POST都是大量資料,瀏覽器緩衝不起,也檢索不起。

這樣,方法就很簡單了:主網頁載入一個空架構,提交一個帶POST資料的AJAX請求載入實質性的資料就行了。伺服器端的那些緩衝參數還可以照用。

但注意:這隻是在一般情況,使得瀏覽器並不中長期保留這些內容。並不是說保證瀏覽器就一定不緩衝這些內容,畢竟用戶端的行為是你所不能控制的。尤其是為效能起見,在短時間內做的快取,這個只要存在就幾乎沒有對抗的可能。

不過,更重要的是,我很想知道你如此處心積慮與瀏覽器本機快取作對的理由。

資料保密?可是只要面對的是瀏覽器環境,你的傳輸和網頁內容被截獲、複製、分析、汙染,只要使用者願意就沒什麼做不到的。(這個你需要的是一個專用的伺服器-用戶端結構)

保證時效性?這完全不必非去禁用用戶端的本機快取。

我猜不透你這個問題的目的。所以我建議你補充一下你的應用環境,和你期望的目的供大家參考。而不是認死了一個技術目標不放。

網易雲課堂裡面那個擷取視頻檔案的連結在firefox中的response headers內容如下:

我用IE瀏覽器播放,在本機快取(臨時)檔案夾中沒有找到對應的視頻檔案的,我猜測是應該伺服器端做了處理

這個問題的本質需求是在瀏覽器裡面做文檔安全,我知道的有幾種做法:
1、在IE中使用控制項,可以很好的控制office文檔的許可權,可以先看看NTKO的資料。
2、轉換為FALSH的格式,好像控制每次從伺服器上擷取一頁的內容,這樣的話大大提高了拿走檔案的難度。

說一個相關的非技術問題:

錄屏軟體!

只要是靜態資源,瀏覽器在載入的過程中,總是會“暫存”。或者換句話說,我通過firebug,或者查看原始碼,都可以拿到你的路徑,直接下載就完了。你想的控制瀏覽器緩衝的思路也許該換換。

@adam 的說法可能是通行的做法。類似的,線上的文檔閱讀器,Flash的角色是一個播放器/閱讀器,同時為了安全考慮,Flash中內建了加解密或叫編碼演算法。閱讀文檔時,Flash接受參數,由Flash動態向伺服器發送請求讀取資料,一次載入一頁或幾頁,經過解碼最終展現出來。在這個過程中,使用者瀏覽器緩衝的只是Flash本身,沒有資料。

例如:http://www.docin.com/p-562081174.html

他載入的資料是:http://docin.oss.aliyuncs.com/docin_562081174.docin

這個資料檔案當然是加密的。

PS. 寫在最後,我的答案可能文不對題,你是想要在現有的東西上解決問題。我是提出了另外的實現方式,實現還是有成本的。

你這種情況是不可能禁止通用瀏覽器(IE、Chrome、Firefox之類)緩衝swf檔案的,除非你開發定製版瀏覽器,或者開發一種新格式,用你特殊的外掛程式播放。

要實現保密需求,可以用以下幾個方面著手:

  • 流式播放,像各大視頻網站一樣,內容實際是在伺服器端的,一段一段發送給瀏覽器端的,只在記憶體裡,不在硬碟上。硬碟上的快取檔案只是個swf格式的播放器(player.swf)
  • 用php動態產生swf檔案,檔案裡嵌入一個唯一標識碼,綁定訪問者的身份(如工號、內網IP、登入名稱),你緩衝了不要緊,要是拿出去幹壞事,那就能追查到泄密的源頭在哪
  • 給每個swf套個殼(殼也是actionscript開發的swf),殼負責通過HTTP與伺服器端互動,擷取必要的授權才播放後面的office文檔。與伺服器端的授權互動可以讓觀看者參與(比如用帳號登入),也可以不要求參與(比如驗證IP,只有在內網才能播放)。如果有人把它拿回家,在請求伺服器授權時就失敗了
  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.