2012-12-08 140 views
0

我通過一個php文件(我們稱之爲serveMedia.php)將圖片和視頻提供給我的index.php。 我使用mod_rewrite,php-sessions和URL中包含的一個令牌來調用index.php中的這些媒體文件,例如, src="media=SOMEFILENAME&type=jpeg&token=2134573946284615492345" 的媒體文件本身通過的.htaccess(deny from all只通過頁面訪問php文件

躺在文件夾中有限制存取權限現在我的問題:是否有可能使這個URL只能通過我的index.php訪問? 我試圖實現的是用戶只能在通過我的頁面發送內容時看到內容,而不是在他們訪問它的URL時看到內容。

也許有一些先進的.htaccess或php選項我不知道? 我在託管的空間,所以這兩個可能是我唯一的選擇。

這就是我與此刻的工作:

的index.php

ob_start(); 

session_start(); 

if (!isset($_SESSION['token']) || $_COOKIE['PHPSESSID'] !== session_id()){ 
    $token = md5(uniqid(rand(), true)); 
    $_SESSION['token'] = $token; 
} 
else { 
    $token = $_SESSION['token']; 
}; 

serveMedia.php:

if(isset($_GET['token']) 
    && $_GET['token'] == $_SESSION['token'] 
    && $_COOKIE['PHPSESSID'] == session_id()){ 

     //streamthisfile! 

else { 
    header($_SERVER['SERVER_PROTOCOL'].' 404 Not Found', true, 404); 
    echo "no file"; 
    session_regenerate_id(true); 
    session_destroy(); 
    unset($_SESSION); 
} 

感謝您的幫助!

回答

0

通常情況下,HTTP頭referer被設定爲圖像請求的源頁面,所以你可以用它來確定,如果你所服務的資源或沒有。

if($_SERVER['HTTP_REFERER'] == 'my/index.php') { 
    //serve page 
} 
+0

這是特定瀏覽器,而不是總是設置,對不對?我引用的頁面的名稱不是靜態的... – basbebe

1

加密變量(如當前日期)並將其放置在「門」鏈接中。當您到達新頁面時,腳本會解密該變量,如果它不匹配或甚至不存在,腳本將重定向到另一個頁面。

喜歡的東西:

 <a href="restricted.php?pass=eERadWRWE3ad=">Go!</a> 

有幾個圖書館,在那裏,可以做所有的加密/解密給你。

其他明智的,你必須依靠在會話即以前的方法,也可以使用HTTP_Refferer(不可靠)

這裏: Restricting access to page unless coming from a specific page

+0

我使用'$ token = md5(uniqid(rand(),true));'生成標記。我試過'if(isset($ _ SERVER ['HTTP_REFERER']))'但這不安全,例如iPhone不再播放視頻。 – basbebe

+0

如果您使用http_referrer, 在頁面上生成該值,在數據庫中存儲相同的值,則您在其上提供視頻的頁面只需使用$ _GET ['pass']檢索傳遞值,並在數據庫值匹配繼續,否則重定向。 – sven