我有一個PHP腳本,測試用戶是否登錄,他訪問的每個頁面都在某個子目錄中。如果他已經登錄,他會得到該頁面,否則他會被重定向到登錄頁面。相反,包括到每一個文件(不可能的,因爲有些是二進制)這一點,我設置的.htaccess這樣PHP身份驗證+ mod_rewrite
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !^$
RewriteRule (.*) /check.php?filename=special/$1
而且check.php的內容
if (!isset($_SESSION['username']))
{
header("location: /login.html");
die();
}
$filename = $_GET['filename'];
include($filename);
的問題是,檢查.php易受本地文件包含,因爲我可以通過../在文件名中移動到父目錄,甚至離開/ var/www。我如何限制它只能從特殊目錄中讀取,或者如果PHP檢查通過允許Apache讀取目標文件而不是讀取文件的PHP腳本,我可以通過什麼方式取消重寫?
編輯我也有特殊目錄中的子目錄。 check.php位於特殊目錄的父目錄中。
這不適用於二進制。需要正確的頭文件 – 2010-09-12 11:58:35
是的,它是check.php的簡化模型。我也可以找到文件的MIME類型並在頭文件中發送Content-Type。 – Dmi 2010-09-12 12:12:44