У меня есть PHP-скрипт, который проверяет, вошел ли пользователь в систему, для каждой страницы, к которой он обращается в определенном подкаталоге. Если он вошел в систему, он получает страницу, в противном случае он будет перенаправлен на страницу входа. Вместо того, чтобы включать это в каждый файл (это невозможно, так как некоторые из них являются двоичными), я настраиваю .htaccess следующим образом
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);
Проблема в том, что check.php уязвим для включения локального файла, потому что я могу передать ../ в имени файла, чтобы перейти в родительский каталог и даже оставить / var / www. Как я могу ограничить его только чтением из специального каталога, или есть ли способ отменить переписывание, если проходит проверка PHP, чтобы Apache мог прочитать целевой файл вместо сценария PHP, читающего файл?
Редактировать У меня также есть подкаталоги в специальном каталоге. check.php находится в родительском каталоге специального каталога.