configurar apache para que no sirva archivos php estáticamente a menos que php-fpm esté configurado

configurar apache para que no sirva archivos php estáticamente a menos que php-fpm esté configurado

Tengo una sección de configuración de Apache 2.4 que utilizo para manejar la rara situación en la que un cuadro de Apache mal configurado podría servir archivos php como texto plano estático y potencialmente renunciar a credenciales, etc.

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

Esas directivas verifican si el módulo php está presente y, si no encuentra ninguno de ellos, no servirá las páginas.

Sin embargo, en la versión actual de httpd 2.4 para centos-8, php-fpm es el método predeterminado para configurar un controlador para php y no carga ningún módulo para 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>

Desafortunadamente, httpd carga automáticamente el módulo proxy_fcgi, por lo que no es útil como indicación de si php-fpm está configurado (o no):

[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

De acuerdo aEl documentohay una HANDLERvariable:

HANDLER El nombre del controlador que crea la respuesta.

... que debería devolver uno de losen manipuladores integrados

default-handler: Send the file using the default_handler(), which is the handler used by default to handle static content. (core)
send-as-is: Send file with HTTP headers as is. (mod_asis)
cgi-script: Treat the file as a CGI script. (mod_cgi)
imap-file: Parse as an imagemap rule file. (mod_imagemap)
server-info: Get the server's configuration information. (mod_info)
server-status: Get the server's status report. (mod_status)
type-map: Parse as a type map file for content negotiation. (mod_negotiation)

Sin embargo, mis intentos de compararlo no tienen éxito; por ejemplo, esto no funciona:

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

Se agradece cualquier sugerencia.

Editar

Descarté el valor de la variable %{HANDLER} con ambos php-fpm instalados, y no así:

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

y devolvió los siguientes encabezados:

X-HANDLER: text/plain     # no php-fpm

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

así que actualicé la prueba a esto:

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

Sin embargo, eso tampoco funciona.

información relacionada