題境:企業內部一些檔案,通過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。
其實,把記憶體的內容放到硬碟上,是一種傳統,也是一種哲學。
作業系統也經常把一些記憶體放到硬碟裡,「微軟」管它叫「虛擬記憶體」。
最後回答作者的問題:如何禁用本機快取?沒必要。
我非要禁用。
- 設定為唯讀
- 在 IE 的設定裡面應該可以禁用
- 修改註冊表
按照補充,給出我的看法:
在這種環境下,你需要的肯定是一個需要用戶端配合的程式,用來對瀏覽器的行為進行修改,而不是單純在伺服器端進行開發。
如果簡單點考慮,你可以為瀏覽器開發外掛程式,用來修改和約束瀏覽器的緩衝行為。然後在伺服器端上,要求只有安裝了你的外掛程式才能提供內容。但這種方法仍然有被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,只有在內網才能播放)。如果有人把它拿回家,在請求伺服器授權時就失敗了