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
- Mattias Geniar: Apache 2.4: ProxyPass (For PHP) Taking Precedence Over Files/FilesMatch In Htaccess
- serverfault.com: Apache 2.4/PHP-FPM ProxyPassMatch and access restriction
- apache.org: mod_proxy (ProxyPass)
- aapche.org: mod_core (FilesMatch)
Sehr hilfreicher Artikel, hat mir in einem konkreten Fall zu 100% weiter geholfen. Vielen Dank!
Danke, war zuerst genauso verwundert wie du 🙂
Hat uns weitergeholfen!
Beste Grüße
Andreas