我對文件夾和文件權限的工作方式有一些疑問。說我有用戶目錄以外的「保護」,如下..php文件夾和文件權限
users
-- usera
-- docs
-- userb
-- docs
protected
我不想誰沒有權限,訪問用戶A的目錄任何用戶B。另外,我不希望任何人通過url鏈接訪問目錄目錄。基本上我只想讓用戶能夠訪問他們自己的目錄,而不是其他人。如何做呢?
謝謝!
我對文件夾和文件權限的工作方式有一些疑問。說我有用戶目錄以外的「保護」,如下..php文件夾和文件權限
users
-- usera
-- docs
-- userb
-- docs
protected
我不想誰沒有權限,訪問用戶A的目錄任何用戶B。另外,我不希望任何人通過url鏈接訪問目錄目錄。基本上我只想讓用戶能夠訪問他們自己的目錄,而不是其他人。如何做呢?
謝謝!
我在這裏回答了一個類似的問題limiting users to subdirectories,您應該可以根據自己的需要進行調整,我也在這裏複製了它。
的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要使用/download.php?file=filename.ext拒絕所有直接下載文件
deny from all
這樣,你會鏈接到文件夾和它只會從當前用戶的用戶目錄下載該文件。
您會希望確保您清理輸入文件名,以便您不易受目錄橫向漏洞利用攻擊。
沒有更多信息可以繼續,我的建議是確保用戶目錄位於Web根目錄之上。這將阻止他們被鏈接到。然後創建一個驗證用戶是誰的PHP腳本。一旦您知道登錄用戶的身份,您可以使用fpassthru()(http://php.net/fpassthru)或類似功能將文檔交付給用戶。
這需要更多的上下文。訪問如何? 「受保護」的相關性是什麼?在讀取或下載文件時訪問 – deceze
。保護是一個目錄,具有.htaccess'拒絕所有'託管php腳本。 – twb
由於您談論的是「權限」,這通常是文件系統的事情,所以這仍然有點令人困惑。當你通過網絡服務器訪問文件時,你似乎在談論更多的抽象權限,或者你是? – deceze