Puncte:1

configurarea apache pentru a nu servi static fișierele php decât dacă este configurat php-fpm

drapel ng
Tom

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ă

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.