apache: ProxyPassMatch für PHP umgeht htaccess Zugangsbeschränkungen

Ich hatte einen kuriosen Fall, den ich erst nicht verstanden hatte.

Ein Verzeichnis war mit einer .htaccess Datei und HTTP BASIC AUTH Zugangsbeschränkt. Das funktionierte auch ganz gut, wenn man nur die URL (z.B.: https://example.org/private/ oder https://example.org/private/index.html ) aufrufte, nicht aber, wenn man eine PHP direkt anwählte.

Der Aufruf von https://example.org/private/info.php führte die PHP Datei aus und zeigte den Inhalt an. – Was natürlich ein Skandal ist und genauer untersucht werden muss.

Es stellte sich heraus, dass in der apache Virtual Host Konfiguration ProxyPassMatch (anstelle von FilesMatch) verwendet wurde um die PHP Dateien an den PHP-FPM Prozess zu übergeben:

# don't
<IfModule mod_proxy.c>
  ProxyPassMatch ^/(.*\.php(/.*)?)$ fcgi://127.0.0.1:9000/
</IfModule>

ProxyPassMatch gibt den Request sofort an fcgi Weiter, noch bevor beispielsweise die <Directory> Direktiven oder mod_auth ausgeführt werden und führt so dazu, dass alle anderen Mechanismen ausser Kraft gesetzt sind.

Laut der offiziellen apache Dokumentation ist ProxyPassMatch denn eher auch dazu da, beispielswiese Bilder an ein CDN auszulagern wo es natürlich Sinn macht, dass man alles Prozess intensive übergeht.

Für PHP ist das gänzlich ungeignet und dazu sollte immer FilesMatch verwendet werden:

# do this instead
# Use SetHandler on Apache 2.4 to pass requests to PHP-PFM
<FilesMatch \.php$>
  SetHandler "proxy:fcgi://127.0.0.1:9000"
</FilesMatch>

Damit werden dann auch alle .htaccess Beschränkungen wieder ausgeführt.

Weiter Informationen

Published by

Steven Varco

Steven ist ein Redhat RHCE- und Kubernetes CKA Zertifizierter Linux-Crack und ist seit über 20 Jahren sowohl beruflich wie auch privat auf Linux spezialisiert. In seinem Keller steht ein Server Rack mit diversen ESX und Linux Servern.

One thought on “apache: ProxyPassMatch für PHP umgeht htaccess Zugangsbeschränkungen”

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert