Am o secțiune de configurare apache 2.4 pe care o folosesc pentru a gestiona situația rară în care o casetă apache configurată greșit ar putea servi fișiere php ca text simplu static și poate renunța la acreditări etc.
<IfModule !mod_php5.c>
<IfModule !mod_php7.c>
<Files "*.php">
Require all denied
</Files>
</IfModule>
</IfModule>
Aceste directive verifică dacă modulul php este prezent, iar dacă nu găsește niciunul dintre ele, nu va servi paginile.
Cu toate acestea, în versiunea curentă a httpd 2.4 pentru centos-8, php-fpm este metoda implicită de configurare a unui handler pentru php și nu încarcă niciun modul pentru 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>
Din păcate, modulul proxy_fcgi este încărcat automat de httpd, așa că nu este util ca o indicație a configurației php-fpm (sau nu):
[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
Conform doc este un MANIPUL
variabil:
HANDLER Numele handlerului care creează răspunsul
... care ar trebui să returneze unul dintre în manipulatoare construite
default-handler: Trimiteți fișierul folosind default_handler(), care este handlerul folosit în mod implicit pentru a gestiona conținutul static. (nucleu)
send-as-is: trimiteți fișierul cu antetele HTTP așa cum este. (mod_asis)
cgi-script: Tratați fișierul ca pe un script CGI. (mod_cgi)
imap-file: analizați ca un fișier cu reguli de hartă imagine. (mod_imagemap)
server-info: Obțineți informațiile de configurare ale serverului. (mod_info)
server-status: Obțineți raportul de stare al serverului. (mod_status)
type-map: analizați ca fișier de tip hartă pentru negocierea conținutului. (mod_negotiation)
Cu toate acestea, încercările mele de a potrivi împotriva ei nu au succes, de ex. asta nu merge:
<FilesMatch \.(php|phar)$>
<If "%{HANDLER} == 'default-handler'">
Require all denied
</If>
</FilesMatch>
Orice sugestii apreciate.
Editați | ×
Am aruncat valoarea variabilei %{HANDLER} cu ambele php-fpm instalate și nu așa:
<IfModule headers_module>
Header always set X-HANDLER "expr=%{HANDLER}"
</IfModule>
și a returnat următoarele antete:
X-HANDLER: text/plain # fără php-fpm
X-HANDLER: proxy:unix:/run/php-fpm/www.sock|fcgi://localhost # cu php-fpm
așa că am actualizat testul la asta:
<IfModule !mod_php5.c>
<IfModule !mod_php7.c>
<If "%{HANDLER} == 'text/plain'">
<Files "*.php">
Require all denied
</Files>
</If>
</IfModule>
</IfModule>
Totuși, nici asta nu funcționează