Kein Ausführen von PHP Dateien in bestimmtem Verzeichnis?

diskalle

New Member
Moin moin,
kurz gesagt suche ich hierfür eine Lösung:

Wie verhindere ich das PHP Skripte in einem bestimmten Verzeichnis ausgeführt werden können?
Der PHP interne Zugriff auf dort liegende Dateien muss aber weiter möglich sein.


Es sollte eine Lösung sein, die auf jedem Server funktioniert. Also nicht nur bei meinem Hoster.
Ich selber habe keinen Server Zugriff auf php.ini etc. Ideal wäre also etwas via .htaccess.

Was ich bisher gefunden hatte:

# Disable PHP in this and all subfolders
RemoveHandler .php .phtml .php3
RemoveType .php .phtml .php3
php_flag engine off

(braucht aber angeblich installiertes mod_php?)

RewriteEngine on
RewriteRule ^.+\.(php([0-9]+)?|phtml)$ - [F,L]

Bin mir aber nicht sicher ob das wirklich funktioniert.

Ich selbst bin kein Server Profi, daher ist mein Wissen in dem Bereich nur sehr rudimentär.
Ich hoffe ihr könnt mir helfen.
Danke.

(Bitte verschieben falls im falschen Thread)
 
Diese Regel reicht:
Code:
RewriteEngine on
RewriteRule \.ph(p[0-9]*?|s|tml?)$ - [F,L]
 
Last edited:
@TE: ... die ist aber nicht allgemeingültig, bei jedem Hoster unter jeder Umgebung. Sowas gibt's nicht - dafür sind die potentiell beteiligten Komponenten und ihre möglichen Konfigurationen zu unterschiedlich.
 
Danke. Also wohl doch nicht möglich.

Gäbe es denn eine Regel nach der die obige Anweisung einsetzbar wäre? Also Erweiterungen/Module/Settings etc. die man auf Vorhandensein prüfen und unter denen die Regel dann funktionieren würde?
 
Nein. Du kannst Dich ja nicht mal drauf verlassen, dass eine .htaccess überhaupt (z.B. Nginx) relevant ist oder welche Befehle darin zugelassen sind.
 
Die in dem fraglichen Verzeichnis vorhandenen PHP-Dateien werden dann vermutlich von anderen PHP-Dateien per Include oder Require eingebunden, oder? In dem Fall kann das im PHP-Code abgefangen werden, z.B. indem man im Hauptscript eine Konstante definiert und die Existenz zu Beginn der zu includenden Script abfragt und falls die Konstante nicht vorhanden ist, das Script abbricht.
 
Schade.

@danton:
Nein, da sollen gar keine PHP Dateien existieren. Sind Uploadverzeichnisse und ich suchte nur nach einem zusätzlichen Schutz vor Shell Scripte etc.
Aber dann müssen halt die üblichen Sicherheitsmechanismen reichen.

Danke euch allen.
 
Wenn du die Rewrite-Regel anwendest, musst du ggfl. auch andere Script-Sprachen berücksichtigen, die der Webserver evtl. verarbeitet, z.B. Python und Perl. Wenn auf die Dateien in den Upload-Verzeichnissen nie vom Browser direkt zugegriffen wird, sondern nur auf dem Server laufende PHP-Scripte den Zugriff benötigen, dann kannst du auch den Zugriff darauf komplett sperren - für Apache mit einer .htaccess Datei:
Code:
order allow,deny
deny from all
Für andere Server (Nginx, IIS, usw.) hilft das natürlich nicht, da musst du dann schauen, welchen Mechanismus der jeweilige Webserver kann.
Es kommt ja auch drauf an, wie die Dateien in dein Upload-Verzeichnis reinkommen. Dann musst du schauen, was sinnvoll ist. Wenn der Upload über ein PHP-Script läuft, kann dieses natürlich direkt schauen, ob es eine erlaubte Datei ist. Bei anderen Methoden (z.b. FTP) würde ich regelmäßig ein Script ins Upload-Verzeichnis schauen lassen und nur die erlaubten Dateien z.B. in ein Download-Verzeichnis verschieben und den Rest verwerfen. Dazu müsstest du mehr Details haben, was du am Ende erreichen willst.
 
Also ich hab die Lösung bei mir konfiguriert.

Apache config:
    <FilesMatch "\.(?:cgi|p[ml]|php)$">
        Require all denied
    </FilesMatch>
 
Oha... :oops: das kommt davon, wenn man mal eben antwortet und dann nicht genau hinschaut, als welcher .htaccess-Datei man gerade den Code kopiert. Für Apache 2.4 korrekt wäre natürlich
Code:
Require all denied
um den Zugriff auf alle Dateien in einem Verzeichnis per htaccess zu sperren. Ich werde mal bei meinen Webprojekten durchschauen, so ich noch vergessen habe, die htaccess Dateien zu aktualisieren...
 
Och, jedeR kann auch manch olle Einstellung verwenden, wenn mod_access_compat aktiviert wird. Eben, wenn Leute bequem sind.
Aber es ist natürlich besser, es gleich auf die aktuelle Version ohne das Modul zu heben.
 
Last edited:
Back
Top