Например, каталог с именем test
размещен.htacess с единственным кодом в первой строке php_flag engine off
В test
каталоге размещен файл test.php
с этим кодом echo 1+3;
И в другом файле (main.php
), помещенном include("test.php");
Откройте main.php
и см. 4
(результат 1 + 3).
Добавлен AddType text/plain.php.phtml.php3
. Тот же результат.
Я ожидал из-за php_flag engine off
код php_flag engine off
в test.php
не будет выполнен.
Что нужно сделать, чтобы предотвратить выполнение кода в test.php
?
Пытаясь предотвратить ситуацию, когда хакер в каталоге изображений каким-то образом загружает php файл, то либо напрямую получает доступ к файлу, либо включает файл в другой файл.
Меры:
1) Создал несколько проверок, чтобы проверить, является ли загруженный файл изображением и не содержит какой-либо PHP-код.
2) Отключить прямой доступ к каталогу изображений (в htaccess)
3) Чтобы быть уверенным, что хакер не мог включить загруженный php файл в файл в другом каталоге, так как понимать нужно установить только чтение для всех каталогов, за исключением каталога изображений
Директивы.htaccess относятся только к Apache при обработке запроса. Это не позволит Apache напрямую выполнять файл test.php
(вернее, это предотвратит выполнение PHP, когда Apache вызывает его). Однако, если Apache выполняет скрипт в другой папке, у вас есть исполняемый экземпляр PHP. Этот экземпляр может делать все, что захочет. Он не будет интерпретировать дальнейшие файлы.htaccess или рассматривать какие- php_flag
директивы php_flag
, поскольку они применяются только до того, как PHP был запущен. После запуска он работает.
Файлы.htaccess интерпретируются Apache только следующим образом:
/foo/bar/test.php
/.htaccess
, применяет его правила, если это так/foo/.htaccess
, применяет его правила, если это так/foo/bar/.htaccess
, применяет его правила, если это так PHP, с другой стороны, просто включает в себя foo/bar/test.php
, он не ищет или не интерпретирует файлы.htaccess.
main.php
находится вне каталога с файлом .htaccess?php_flag engine off
в каталог, где находитсяmain.php
?