Moin!
Ich möchte, dass eine php-Datei nur durch eine andere php-Datei gelesen werden kann. Im Klartext heisst das:
Die heißen und brauchbaren Tips mit dem
- Datei Verzeichnis außerhalb von DOCUMENT_ROOT ("Favorit")
- mit .htaccess geschütztes Verzeichnis ("Zweiter Sieger")
- mit .htaccess beginnender Dateiname ("Geht auch")
hast Du schon bekommen.
Es folgt:
Die files-Direktive in der .htaccess ("Geht auch")
<Files "geheim.php">
Order allow, deny
deny from all
</Files>
Der Rat, die Datei nicht mit Endung .php auszustatten war aber gerade *kein* guter, denn so kann diese Datei herunterladen werden statt dass diese ausgeführt wird. Dadurch erfährt ein Angreifer ggf. noch viel mehr.
Was bedeutet: "nur durch eine andere php-Datei gelesen werden kann"?
Falls die Datei nur von einer *bestimmten* php-Datei aus includiert werden darf (wozu auch immer das gut sein soll), dann schaue Dir $_SERVER["PHP_SELF"] an:
Das enthält den Dateiname des aktuell ausgeführten Skripts, relativ zum Document Root- und zwar des inkludierenden Skriptes. Den Dateiname des includierten Skriptes hingegen enthält die "Magic Constant" __FILE__
Mit einem
if ('/erlaubt.php' != $_SERVER['PHP_SELF']) {
header ('Error: 404');
exit;
}
in der geheim.php kannst eine Hürde aufbauen. Eine Konstante im aufrufenden Skript zu setzen kann man auch machen, das ist aber entbehrlich und bietet nicht mehr Sicherheit. Selbstverständlich kannst Du auch Bockstürze machen und den MD5-Key der aufrufenden Datei berechnen lassen und diesen mit einem gespeicherten Wert vergleichen ... oder oder oder. Aber ich wüsste nicht, was das noch brächte.
MFFG (Mit freundlich- friedfertigem Grinsen)
fastix