2010-08-04 12 views
6

我一直在網上衝浪幾個小時尋找解決方案,只有部分和非功能強大的解決方案來展示我的努力。如何防止直接訪問/下載到mp3/wav文件,同時允許Flash播放器使用.htaccess(或PHP)訪問它們

下面的解決方案似乎是一個很好的修復,但它也阻止我的Flash Player訪問文件。 我只允許從特定頁面訪問嗎?

< Files ~ "...">
order allow,deny
deny from all
< /Files>



下面的解決方案似乎很大,首先是因爲它沒有讓人們查看目錄中的文件,但如果用戶知道音樂文件的準確網址,他們可以下載它:現在

SetHandler application/x-httpd-php
SetHandler application/x-shockwave-flash

,我碰到this post來強制用戶產生一個用戶名和密碼using htaccess但我對話框彈出時的Flash播放器屏幕上。 有沒有一種方法可以讓頁面發送登錄信息而不需要用戶執行任何操作?



如果這不是一個安全的方法,能有人建議實施該限制功能的安全和相對直接的方法是什麼?網址和例子將不勝感激

P.S.這是一個WordPress網站,因此,我將使用PHP作爲編程語言來實現任何解決方案。

P.S.想阻止新手下載,而不是黑客/餅乾/互聯網嚮導。

感謝

回答

8

由於PHP可用,使用它來保護文件。不要將它們放在Web根目錄中,但可以在PHP可訪問的位置。然後生成一個一次性使用的網址,如:

<?php 
    $unique = md5(uniqid()); // 32 hex characters 
?> 

然後在會話中存儲/服務器/數據庫的獨特價值,並有另一頁驗證唯一的字符串流的文件之前:

<a href="streamer.php?id=6dd4566eb245627b49f3abb7e4502dd6">Stream Me</a> 

請務必在第一次使用後過期使用此獨特令牌(或者如果您感到慷慨,可能會過幾次)。它不會阻止頑固分子捕獲HTTP流,但它會阻止偶然鏈接。

+1

-1 uniqid()本身是一個非常弱的隨機數,並不意味着阻止攻擊。更多md5()不會使該值更隨機。除此之外,這與我的帖子幾乎相同,但包含的信息較少。 – rook 2010-08-04 19:27:39

+1

@Rook:我在md5()調用中封裝了uniqid(),以確保輸出字符都是URL友好的 - 不是爲了增強加密安全性。這可能是完全沒有必要的。雖然uniqid()可能很弱,但在這種情況下,可能「足夠好」來停止直接鏈接。如果您可以改進所提供的信息/示例,請將其添加到您的答案,並讓它投票。 – Goyuix 2010-08-04 20:49:55

0

總會有人能夠看起來好像他們正在運行Flash,並能夠下載音樂。可以使用TamperData查看瀏覽器產生的所有流量(包括閃存),並且可以重放,攔截和修改所有請求。 Flash很容易反編譯,但這可能不是必需的。

您唯一能做的就是提高酒吧並防止直接鏈接到您的內容。您可以使用PHP來限制對媒體的訪問。將所有媒體放在Web根目錄之外,或使用.htaccess deny from all保護該目錄。讓Flash應用程序首先發送一個「請求下載」,給Flash應用程序一個臨時的單次使用令牌(cryptographic nonce)。然後在下一個請求中使用該令牌從PHP文件下載音樂。這很容易愚弄,但它是你能做的最好的事情。

+0

我知道從它在互聯網上它永遠不會真正安全,但我的目標是典型的技術人員用戶誰可能會看到位置playlist.xml文件並瀏覽它,打開它,然後去mp3文件網址包括。我不想阻止黑客和黑客在狂野的西部。 – Julian 2010-08-04 19:14:16

+0

@ Julian我正在談論的是針對兒童的捍衛,這是最簡單的攻擊。攔截流量和反編譯Flash應用程序是微不足道的。你可以獲得一個真正安全的服務器,但是這項服務本質上是有缺陷的。我所建議的是像bleep這樣的主要廠商音樂供應商使用的。 – rook 2010-08-04 19:16:50

+0

@Julian也不會使用「cracker」和「wild west」這樣的詞。你從一個非常熟練的白帽黑客得到的事實。 – rook 2010-08-04 19:19:04

3

正如Rook指出的那樣,你不能兩面都有。你不能同時給與你的用戶訪問你的數據。無論您的身份驗證方案如何複雜,勝任的用戶總是可以繞過它,因爲爲了讓Flash播放器正常工作,他們必須擁有憑據。就我個人而言,我認爲正確的解決方案是認識到您無法阻止確定的用戶保存您的內容並讓他們放棄。如果你堅持讓它變得更加困難,那麼什麼樣的解決方案適合你將取決於你希望哪些用戶能夠有效應對,以及你願意投入實施的工作量。

一個簡單的解決方案是在每次提供查看器頁面時生成一次性密鑰,然後通過檢查它的PHP腳本來提供內容。這樣,用戶至少必須加載他們想要的內容的查看器頁面,並檢查其來源以提取密鑰,而不是隻在瀏覽器的地址欄中輸入URL。但是,如果您的網站變得非常流行,那麼有人可能會提供可自動執行的腳本。例如,請參閱youtube-dl,這是一個用於下載YouTube視頻的Python腳本。

在你的文章中你提到了用Apache保護文件的密碼。 Flash播放器應用程序可能提交HTTP身份驗證是可能的,但我懷疑任何現有播放器都支持該操作,而修改此操作將需要ActionScript的來源和經驗。任何解決方案都會像閱讀頁面源文件一樣受到如此輕微的攻擊,可能需要修改播放器。

+0

我對冗餘表示歉意。在撰寫本文時,我沒有得到通常的「其他人已經解答了答案/編輯了他們的答案」通知。 – 2010-08-04 19:38:59

-1

還有另一種解決方案嘗試過,並且相當成功。我試圖在iframe中加載歌曲。直接訪問歌曲將被限制在PHP代碼中。

相關問題