Не работает движок .htaccess php_flag. Или я не понимаю, как это работает

0

Например, каталог с именем 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 файл в файл в другом каталоге, так как понимать нужно установить только чтение для всех каталогов, за исключением каталога изображений

  • 0
    То есть main.php находится вне каталога с файлом .htaccess?
  • 0
    Да, снаружи Нужно добавить php_flag engine off в каталог, где находится main.php ?
Показать ещё 3 комментария
Теги:
.htaccess

1 ответ

4
Лучший ответ

Директивы.htaccess относятся только к Apache при обработке запроса. Это не позволит Apache напрямую выполнять файл test.php (вернее, это предотвратит выполнение PHP, когда Apache вызывает его). Однако, если Apache выполняет скрипт в другой папке, у вас есть исполняемый экземпляр PHP. Этот экземпляр может делать все, что захочет. Он не будет интерпретировать дальнейшие файлы.htaccess или рассматривать какие- php_flag директивы php_flag, поскольку они применяются только до того, как PHP был запущен. После запуска он работает.

Файлы.htaccess интерпретируются Apache только следующим образом:

  • заданный путь://foo/bar/test.php
  • Apache проверяет, существует ли /.htaccess, применяет его правила, если это так
  • Apache проверяет, существует ли /foo/.htaccess, применяет его правила, если это так
  • Apache проверяет, существует ли /foo/bar/.htaccess, применяет его правила, если это так

PHP, с другой стороны, просто включает в себя foo/bar/test.php, он не ищет или не интерпретирует файлы.htaccess.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню