簡體   English   中英

防止直接文件訪問

[英]Prevent direct file access

我有幾個音頻文件,我不想讓其他人訪問它們。 每個文件都在主文件夾內的一個單獨的文件夾中,我現在稱之為“下載”。 所以“下載”有幾個其他目錄,每個目錄里面都有音頻文件。 這些音頻文件在系統上的Web應用程序中播放。

問題是,現在任何人都可以輸入文件localhost/download/dir/sound.wav的完整地址並播放音頻文件。 這是我想要防止發生的事情,我希望這些文件只在訪問或從我們的應用程序流式傳輸時才流式傳輸。

我在.htaccess文件上嘗試了以下操作

deny from all

這剛剛返回403 forbidden頁面,但我無法從應用程序中流式傳輸文件

RewriteEngine on
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http://(www\.)localhost.com/.*$ [NC]
RewriteRule \.(mp3|wav)$ - [F]

這只是禁用了流一起沒有返回403或任何它只是沒有從應用程序或直接訪問流

最后我使用AJAX來調用保存要流式傳輸的文件的腳本; 我可以使用任何選項嗎?

不可能阻止用戶訪問這些文件

為了聽到它們,必須將它們下載到用戶的計算機上,這意味着它們必須是可訪問的!

您可以做的最好的事情是加密文件並在播放器中解密它們。 但即使這樣,玩家也可以進行逆向工程,有人可以發現加密密鑰和算法。 最后你會發現你浪費了大量的處理時間,實際上減慢了你的應用程序!

只有一個問題:服務器如何檢測誰曾請求您的媒體 - 應用程序或其他系統,只是使用類似的協議?

但是如果你只是想阻止對你的媒體提出最簡單的http請求,你可能會涉及一些令牌交換系統,例如你的應用程序以特定格式發送媒體請求,服務器發送令牌以訪問某些文件,然后你的應用程序可能訪問特殊(比如說php)腳本為它提供令牌,腳本返回你的聲音流。 通過這種方式,可以禁止從外部訪問媒體,並且只能由您自己的服務器端php腳本訪問。

然后,為了獲得對媒體文件的訪問權限,用戶需要知道您現有的令牌或您的交換協議,這將消除隨意用戶隨意訪問您的媒體。 但是,正如您之前所說,可能無法防范“受過教育的用戶”。

一種可能性是:

  1. 在該下載文件夾上添加一個apache重寫指令,將所有請求路由到php腳本,而不是將請求的文件作為參數。
  2. 在應用程序中創建此腳本(例如sound.php),該腳本將該文件路徑作為get參數。 此腳本可以輸出正確的http標頭,以指示數據類型是wav還是您想要的任何內容。 然后檢查一些cookie或令牌或類似物,並僅在用戶有效時直接輸出受限文件的內容(請參閱readfile )。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM