Sie bauen Ihre Website über „allow all verhindern, dann leugne "Logik". Sie sollten es mit der Logik "alles verweigern, dann zulassen" erstellen. Wenn Sie Apache beispielsweise anweisen, alle Dateien in einem bestimmten Verzeichnis bereitzustellen, überschreiben Sie diese Konfiguration, um Apache mitzuteilen, dass einige Dateien in diesem Verzeichnis nicht bereitgestellt werden sollen. Das heißt, Sie wahrscheinlich so etwas wie dieses:
<VirtualHost *:80>
ServerName foo.com
DocumentRoot "/path/to/files"
</VirtualHost>
Mit einem Verzeichnisstruktur wie folgt aus:
/path/to/files
index.php
config.php
/path/to/files/lib
db.php
etc.php
other_thing.php
Mit diesem Aufbau kann jeder beantragen http://foo.com/config.php
oder http://foo.com/lib/etc.php
direkt, das ist, was Sie versuchen zu verhindern. Anstatt einzelne Ausnahmen für alles hinzuzufügen, was Sie ablehnen möchten, beginnen Sie andersherum. Das heißt, wenn Sie Dateien haben, die nicht geliefert werden sollen, dann setzen Sie sie nicht in den Dokumentenstamm.
<VirtualHost *:80>
ServerName foo.com
DocumentRoot "/path/to/files/public"
</VirtualHost>
Beachten Sie, dass DocumentRoot jetzt auf ein Unterverzeichnis innerhalb Ihres Projekts festgelegt ist. Fügen Sie nur Ihre öffentlichen Ressourcen in dieses Verzeichnis ein. Alle anderen Dateien gehen nach draußen (d. H. Über) öffentlich, und somit kann nicht von Apache bedient werden, während PHP weiterhin erlaubt ist, sie einzuschließen.
/path/to/files
config.php
/path/to/files/lib
db.php
etc.php
other_thing.php
/path/to/files/public
index.php
Was also möchten Sie tun, wenn ein Benutzer auf eine PHP-Datei in diesem Verzeichnis zugreift? Hat es zurück gedient, als ob es eine einfache Textdatei ist? – rickdenhaan
Es ist nur für Dateien mit '.php' Erweiterung? – Croises
Die Dateien können vom Benutzer sowieso nicht direkt aufgerufen werden. Ich möchte nur verhindern, dass alle Dateien (nicht nur solche mit .php-Endungen) ausgeführt werden, so dass sie auch nicht aus einer anderen PHP-Datei ausgeführt werden können. – kot