2012-11-26 45 views
2

首先,我很抱歉,如果這個問題已經被問到,因爲我搜索並找不到確切的問題和答案。防止直接訪問一個PHP文件,並只允許一個域名

讓我們開始我想迫使.mp3文件下載,而不是因此打我用下面的代碼中的download.php

<?php 
/** 
* Download the mp3 file. 
*/ 
$file_name = $_GET["filename"]; 
$file_url = $_GET["fileurl"]; 

header("Content-Description: File Transfer"); 
header('Content-type: application/mp3'); 
header("Content-Transfer-Encoding: Binary"); 
header("Content-disposition: attachment; filename=\"".$file_name."\""); 
readfile($file_url); 
exit; 

所以,當用戶點擊一個鏈接與目的地http://www.example.com/download.php?filename=example.mp3&url=http://www.example.com/example.mp3的能保存文件。

所以,我想是爲了防止直接訪問文件http://www.example.com/download.php

,並允許用戶使用URL下載文件:http://www.example.com/download.php?filename=example.mp3&url=http://www.example.com/example.mp3

+0

的問題是錯誤的莫名其妙!通過防止直接訪問該文件,你的意思是什麼? – behz4d

+0

請花幾分鐘時間查看已提交給您問題的答案,然後「接受」您認爲是您問題的最佳解決方案的答案(如果有的話) - 謝謝。 –

回答

0

如果您使用的是Apache服務器,你可以使用的.htaccess以拒絕訪問一些文件。

這裏是您可以添加到您的.htaccess文件的一個示例:

<Files /example.mp3> 
    Order Allow,Deny 
    Allow from all 
</Files> 
+0

其實我只是想拒絕直接訪問download.php文件,另一方面我想讓用戶可以使用這個url下載文件:www.example.com/download.php?filename=example.mp3&url=http:/ /www.example.com/example.mp3我累了.htaccess,但它沒有工作形式我使用拒絕從所有允許從example.com它沒有工作。 – user1854126

0

你的意思是這樣的?

if($_GET['filename'] == ''){ 
     header("Location: http://someLocation.com/"); 
    } 
+0

我完全可以請你告訴我如何把這段代碼放在代碼上面列出的download.php文件中。 – user1854126

+0

將這段代碼放在download.php的頂部。我認爲它應該可以正常工作。 – Kevin

0

首先,從請求中定義的參數盲目地調用readfile()會帶來巨大的安全風險。

我的建議是隻接受文件名,然後建立一個包含文件名和mp3文件夾路徑的完整文件路徑。然後,確保該文件存在,那麼做readfile()

你的MP3文件夾應該是你的公共HTML文件夾之外,如果還是不行,至少是阻止對直接接入的接入規則配置Web服務器夾。

其次,防止進入你的PHP文件不帶參數的唯一方法是使用一個重寫規則(如果你的Web服務器支持的話)

一個更簡單的方法可能是檢查,看看是否有沒有文件名參數,則有默認行爲,即重定向到主頁等。這也可以是默認行爲,指定的文件不存在。

最後,我有一個GitHub的項目,你可能會發現有用 - 的想法,如果沒有別的:

https://github.com/iNamik/PHP-Download-Tracker