我有一個用戶的子目錄,我想限制每個子文件夾只有該用戶。限制用戶到子目錄
例如我有/users/user1
,我想保護user1
文件夾,以便只有user1可以訪問裏面的文件。
我試着玩弄一個.htaccess和.htpasswd文件,但即使我已經對MySQL數據庫進行了身份驗證,但仍會提示第二次登錄。
我不知道該怎麼做基本上有第二個登錄請求自動處理,因爲用戶以前會被認證。
我可以發佈一些代碼,我有我的.ht文件,但我認爲這個信息可以讓球滾動。
我有一個用戶的子目錄,我想限制每個子文件夾只有該用戶。限制用戶到子目錄
例如我有/users/user1
,我想保護user1
文件夾,以便只有user1可以訪問裏面的文件。
我試着玩弄一個.htaccess和.htpasswd文件,但即使我已經對MySQL數據庫進行了身份驗證,但仍會提示第二次登錄。
我不知道該怎麼做基本上有第二個登錄請求自動處理,因爲用戶以前會被認證。
我可以發佈一些代碼,我有我的.ht文件,但我認爲這個信息可以讓球滾動。
我覺得用一個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,它只會從當前用戶的用戶目錄下載該文件。
您會希望確保您清理輸入文件名,以便您不易受目錄橫向漏洞利用攻擊。
認證如何?通過HTTP基本身份驗證?基於表單的cookie使用登錄?這些是兩個不同的登錄系統,通常是相互獨立的。 –
我有點小知識,但我認爲(apache)htpasswd與mysql身份驗證不一樣,你使用的是mod_auth_mysql嗎? – ajreal
可能的重複:http://stackoverflow.com/questions/2328068/authentication-denying-access-to-files-in-directory-with-php – djdy