2011-11-23 31 views
0

我有一個用戶的子目錄,我想限制每個子文件夾只有該用戶。限制用戶到子目錄

例如我有/users/user1,我想保護user1文件夾,以便只有user1可以訪問裏面的文件。

我試着玩弄一個.htaccess和.htpasswd文件,但即使我已經對MySQL數據庫進行了身份驗證,但仍會提示第二次登錄。

我不知道該怎麼做基本上有第二個登錄請求自動處理,因爲用戶以前會被認證。

我可以發佈一些代碼,我有我的.ht文件,但我認爲這個信息可以讓球滾動。

+0

認證如何?通過HTTP基本身份驗證?基於表單的cookie使用登錄?這些是兩個不同的登錄系統,通常是相互獨立的。 –

+0

我有點小知識,但我認爲(apache)htpasswd與mysql身份驗證不一樣,你使用的是mod_auth_mysql嗎? – ajreal

+0

可能的重複:http://stackoverflow.com/questions/2328068/authentication-denying-access-to-files-in-directory-with-php – djdy

回答

1

我覺得用一個PHP代理來訪問這些文件會在這種情況下是足夠的,沿着線的東西:

的download.php

<?php 
    /** Load your user assumed $user **/ 

    $file = trim($_GET['file']); 

    /** Sanitize file name here **/ 

    if (true === file_exists('/users/user'.$user->id.'/'.$file)) { 
     //from http://php.net/manual/en/function.readfile.php 
     header('Content-Description: File Transfer'); 
     header('Content-Type: application/octet-stream'); 
     header('Content-Disposition: attachment; filename="'.$file.'"'); 
     header('Content-Transfer-Encoding: binary'); 
     header('Expires: 0'); 
     header('Cache-Control: must-revalidate, post-check=0, pre-check=0'); 
     header('Pragma: public'); 
     header('Content-Length: ' . filesize($file)); 
     ob_clean(); 
     flush(); 
     readfile($file); 
     exit; 
    } else { 
     throw new Exception('File Not Found'); 
    } 

的.htaccess否認所有直接文件下載

deny from all 

然後,您將鏈接到文件夾通過使用/download.php?file=filename.ext,它只會從當前用戶的用戶目錄下載該文件。

您會希望確保您清理輸入文件名,以便您不易受目錄橫向漏洞利用攻擊。

+0

謝謝,我會放棄它!如果我所要做的只是將文件加載到html5音頻標籤,那麼我可以播放它嗎? – innov83r

+0

是的,如果你使用它作爲音頻標籤,你只需要做一些事情: 我從來沒有這樣做過,通過音頻標籤的MP3文件,所以如果它不起作用,我會刪除應允許它的附件處置工作,但我沒有測試它讓我知道如何它是 –

+0

嘿賈森,它似乎並沒有爲我工作...仍然試圖讓它的工作... – innov83r