Рейтинг:1

настройка apache, чтобы статически не обслуживать php-файлы, если не настроен php-fpm

флаг ng
Tom

У меня есть раздел конфигурации apache 2.4, который я использую для обработки редкой ситуации, когда неправильно настроенный ящик apache может обслуживать php-файлы как статический обычный текст и потенциально отказываться от учетных данных и т. д.

<IfModule !mod_php5.c>
  <IfModule !mod_php7.c>
    <Files "*.php">
        Require all denied
    </Files>
  </IfModule>
</IfModule>

Эти директивы проверяют наличие модуля php, и если он не находит ни один из них, он не будет обслуживать страницы.

Однако в текущей сборке httpd 2.4 для centos-8 php-fpm является методом настройки обработчика для php по умолчанию и не загружает никаких модулей для php:

<IfModule !mod_php5.c>
  <IfModule !mod_php7.c>
    # Enable http authorization headers
    SetEnvIfNoCase ^Authorization$ "(.+)" HTTP_AUTHORIZATION=$1

    <FilesMatch \.(php|phar)$>
        SetHandler "proxy:unix:/run/php-fpm/www.sock|fcgi://localhost"
    </FilesMatch>
  </IfModule>
</IfModule>

К сожалению, модуль proxy_fcgi автоматически загружается httpd, поэтому он бесполезен в качестве индикатора того, настроен ли php-fpm (или нет):

[root@web httpd]# rpm -q --whatprovides /usr/lib64/httpd/modules/mod_proxy_fcgi.so
httpd-2.4.37-39.module_el8.4.0+778+c970deab.x86_64

Согласно с документ Существует ХАНДЛЕР переменная:

HANDLER Имя обработчика, создающего ответ

... который должен вернуть один из во встроенных обработчиках

default-handler: отправьте файл с помощью default_handler(), который является обработчиком, используемым по умолчанию для обработки статического содержимого. (основной)
отправить как есть: отправить файл с заголовками HTTP как есть. (mod_asis)
cgi-script: обрабатывать файл как сценарий CGI. (mod_cgi)
imap-file: анализировать как файл правил карты изображений. (mod_imagemap)
server-info: получить информацию о конфигурации сервера. (мод_информация)
server-status: получить отчет о состоянии сервера. (мод_статус)
type-map: анализировать как файл карты типов для согласования содержимого. (мод_переговоры)

Однако мои попытки сопоставления с ним не увенчались успехом, например. Это не работает:

<FilesMatch \.(php|phar)$>
  <If "%{HANDLER} == 'default-handler'">
    Require all denied
  </If>
</FilesMatch>

Любые предложения приветствуются.

Редактировать

Я сбросил значение переменной %{HANDLER} с обоими установленными php-fpm, а не так:

<IfModule headers_module>
    Header  always set X-HANDLER "expr=%{HANDLER}"
</IfModule>

и он вернул следующие заголовки:

X-HANDLER: text/plain # нет php-fpm

X-HANDLER: proxy:unix:/run/php-fpm/www.sock|fcgi://localhost # с php-fpm

поэтому я обновил тест до этого:

<IfModule !mod_php5.c>
  <IfModule !mod_php7.c>
    <If "%{HANDLER} == 'text/plain'">
      <Files "*.php">
          Require all denied
      </Files>
    </If>
  </IfModule>
</IfModule>

Однако и это не работает

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.