Berechtigung nur für php
thomas
- programmiertechnik
1 Der Martin
0 henman
0 Joachim0 suit0 fastix®
Hallo zusammen,
Ich möchte, dass eine php-Datei nur durch eine andere php-Datei gelesen werden kann. Im Klartext heisst das:
In einer datei mache ich include("geheimedatei.php");
Die geheime Datei soll dann includet werden, aber wenn mann im Browser geheimedatei.php eingibt soll eine Fehlermeldung kommen.
Welche Berechtigung muss ich da verteilen? Der Server lauft mit Linux.
MFG
Hallo,
In einer datei mache ich include("geheimedatei.php");
Die geheime Datei soll dann includet werden, aber wenn mann im Browser geheimedatei.php eingibt soll eine Fehlermeldung kommen.
das klingt für mich eher nach einem Workaround als nach einem vernünftigen Lösungsansatz.
Wenn geheimedatei.php nicht direkt im Browser aufrufbar sein soll, darf diese Datei nicht über HTTP erreichbar sein. Das einfachste wäre, sie in einem Verzeichnis abzulegen, das per HTTP nicht erreichbar ist.
Alternativ könnte man mit einer lokalen Konfigurationsdatei (.htaccess) dafür sorgen, dass Zugriffe auf diese Datei abgewiesen werden.
Zu guter Letzt sollte man sich fragen, warum diese Datei, die nur includiert werden soll, überhaupt die Extension ".php" haben muss - oder ob man deren Namen nicht komplett ändern könnte. Der Apache Webserver verweigert in der Defaultkonfiguration beispielsweise den Zugriff auf alle Dateien, deren Name mit ".ht" beginnt.
Welche Berechtigung muss ich da verteilen? Der Server lauft mit Linux.
Und PHP läuft vermutlich unter demselben Benutzer wie der Webserver selbst. Da ist mit Unix-Berechtigungen nicht viel zu machen.
Ciao,
Martin
hallo thomas,
Die geheime Datei soll dann includet werden, aber wenn mann im Browser geheimedatei.php eingibt soll eine Fehlermeldung kommen.
einen Trick hab ich noch aus der phpbb-Software. Definiere in Datei a eine Konstante und frag in Datei b (die, die per include dazukommen soll) ab, ob diese definiert ist. Wenn nicht, dann lass das Script abbrechen, evtl mit Fehlermeldung (die())
grüße,
henman
Hi,
Ich möchte, dass eine php-Datei nur durch eine andere php-Datei gelesen werden kann.
Warum legst Du sie nicht in ein geschütztes Verzeichnis? Bin nicht wirklich gut in htaccess, aber etwa sowas hilft:
Order deny,allow
Deny from all
Allow from [Deine IP]
Gruesse, Joachim
Ich möchte, dass eine php-Datei nur durch eine andere php-Datei gelesen werden kann. Im Klartext heisst das:
Das ist - soweit ich das beurteilen kann - unmöglich. Wenn eine Datei dem Webserver (z.B. Apache) gehört, dürfen alle PHP-Scripte diese Datei lesen[1].
Die geheime Datei soll dann includet werden, aber wenn mann im Browser geheimedatei.php eingibt soll eine Fehlermeldung kommen.
Das ist ein simpler http://de.selfhtml.org/servercgi/server/htaccess.htm#verzeichnisschutz@title=Zugriffschutz - der verhindert aber nicht, dass andere PHP-Scripte diese Datei lesen dürfen.
Welche Berechtigung muss ich da verteilen? Der Server lauft mit Linux.
Die Berechtigungen spielen hier keine Rolle da diese nur auf Dateisystemebene gelten - ob da 777, 700, 400 oder sonstwas steht sollte keine Rolle spielen solange "irgendwer" Leserechte hat der irgendwie PHP zuzuordnen ist.
[1] Nuff said - aber natürlich hängt das auch von der Konfiguration ab.
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
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