Skriptzugriffe beschränken
lima-city → Forum → Programmiersprachen → PHP, MySQL & .htaccess
benutzer
brauche
datei
einrichten
ersten drei
funktion
http
ordern
ordner
ordners
problem
realisieren
server
sinn
skriptum
system
test
zeile
zugreifen
zugriff
-
Moin,
also, möchte eines von folgendem erreichen:
- Allen PHP-Skripten den Zugriff zu einem bestimtmen Ordner untersagen, es sei denn, sie liegen bereits in diesem Ordner.
Bsp: Es existieren die Dateien \"test1.php\" und der Ordner \"/test/ mit der Datei \"test2.php\" (und weiteren Unterordnern und Dateien. Der Ordner /test/ soll derart geschützt werden, dass z.B. die test1.php nicht auf die Inhalte von ihm zugreifen kann, die index2.php aber freien Zugang hat zu allen Unterordnern und Dateien.
oder
- Den Skripten innerhalb eines Ordners den Zugriff auf tiefergelegene Ordner verbieten.
Mit obiger Struktur würde das bedeuten, dass nun das /test/-Verzeichnis so eingestellt wird, dass die test1.php darauf zurgreifen kann, aber die test2.php - und alle anderen PHP-Sktipte im Ordner /test/ - nicht mehr auf test1.php (oder andere Dateien/Unterverzeichnisse vom hier angenommenen root-Verzeichnis) zugreifen kann.
Das zweite wäre ehrlich gesagt kuhler, aber das erste würde auch gehen. Ich bin mir ziemlich sicher, dass das zweite funktioniert (sonst könnte man doch auch auf die Daten anderer User hier auf lima zugreifen, oder?), die Frage ist nur, mit welchen Mitteln. Muss man dazu Server-Konfigurationen vornehmen, oder welche Mittel braucht man?
Kenn mich mit dem Rechte-Management im Web leider nicht aussergewöhnlich gut aus, also bitte nicht hier einfach reinwerfen \"da musst du nur die Rechte auf CHMOD xxx setzen\", sondern sagen, wie ich das machen würde ;) -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
Das ist eigentlich schwer zu sagen, wenn du nicht die Besitzer der Dokumente ändern kannst, is das außerdem recht schwer zu realisieren. Ansonsten kannst du auch nur den Schreibzugriff für andere untersagen.
Kannst du das Problem noch genauer beschreiben?
Ansosnten solltest du dich wirklich mit chmod beschäftigen, da gibt es viele Möglichkeiten. Is eigentlich auch relativ einfach ;)
Gruß
-AlienDwarf -
Das Problem ist, ich möchte ein online-Frontend zur Websiteentwicklung schreiben. Dabei soll es möglich sein, mehrere Benutzer zu verwalten und jeweils pub-Ordner bereit zu stellen, in denen dann die fertig entwickelte Homepage liegt (das ganze zielt auf Möglichkeiten zur Teamentwicklung hin). Das ganze ist möglicherweise vergleichbar mit einem normalen Webserver. Dort laufen Serverprogramme etc in einem Ordner und es gibt einen bestimmten Ordner (htaccess o.ä.) in dem dann die Homepage läuft. Wenn man aber in diesen Ordner einfach beliebige PHP-Skripte von aussen laden kann, ist es möglich, mit diesen PHP-Skripten auf die Programmordner der Serversoftware zuzugreifen und zwar lesend und schreibend. Deshalb muss die Website in einen \"Käfig\" gelegt werden, aus dem PHP nicht rauskann, wenn man so will, dass also z.B. ein Zugriff auf \'../somedir\' von einer PHP-Datei im Ordner /htaccess/ nicht auf den Ordner /somedir/ zugreifen kann - wenn das durch diese Analogie verständlicher wird.
So etwas brauche ich halt ebenfalls. Es soll nicht möglich sein, von der \"veröffentlichten\" Homepage per PHP auf die Programmdaten des Frontends zuzugreifen, da das das ganze Konzept der Benutzersteuerung und -Restriktion des Frontends natürlich kompromoittieren würde. Hoffentlich ist klar, was ich meine ;)
Kann man auch \"aus der ferne\" auf chmod zugreifen? Weil das ja afaik ein Linux-Konsolenbefehl ist? Und könnte man einen solchen Zugriff auch per PHP realisieren? -
Kann man auch \"aus der ferne\" auf chmod zugreifen? Weil das ja afaik ein Linux-Konsolenbefehl ist? Und könnte man einen solchen Zugriff auch per PHP realisieren?
http://www.selfphp.info/funktionsreferenz/dateisystem_funktionen/chmod.php
Ob sich das was du vor hast, damit realisieren lässt, weiss ich nicht...
Beitrag geändert: 19.7.2008 3:10:35 von nerdinator -
Um die Ordner vor externem Zugriff (durch Browser) zu schützen kannst du chmod benutzen.
Vor PHP auf dem Server kannst du das aber glaube ich nicht. Welchen Sinn hätte das auch, denn PHP Scripte schreibst ja nur du, und du weißt ja was du tust.
Gruß, Prog -
Welchen Sinn hätte das auch, denn PHP Scripte schreibst ja nur du, und du weißt ja was du tust.
Dabei soll es möglich sein, mehrere Benutzer zu verwalten und jeweils pub-Ordner bereit zu stellen, in denen dann die fertig entwickelte Homepage liegt (das ganze zielt auf Möglichkeiten zur Teamentwicklung hin).
Bitte erst das Problem lesen ;) Der Sinn ist eindeutig ;) Und chmod schützt auch vor PHP-Skripten, soweit ich weiß (sonst wäre es wohl kaum auf manchen Servern nötig php erst mit chmod den Schreibzugriff zu verbieten), bietet nur leider nicht die Möglichkeiten die ich brauche. Man kann nur bestimmten Usern oder Usergruppen den Zugriff zu bestimmten Ordnern verwehren, das bringt mir aber Null, da sowohl die Skripts innerhalb, als auch die Skripts ausserhalb des Systemordners aufgeführt werden müssen, nur sollen sie eben voneinander getrennt werden. -
Ich bin mir nicht sicher ob das klappt (ich kann kein PHP), aber du könntest versuchen fopen(); in der php.ini zu deaktivieren.
Ansonsten müsstest du dich mit dem Apache Rechteverwaltungssystem rumschlagen, welches aber doch recht kompliziert ist.
Grüße, Moritz
P.S. Im weiteren Nachdenken fällt mir auf, dass das so gar nicht geht. Aber per .htaccess sollte es gehen. Denn ich glaube PHP muss auch diese Barriere überwinden. -
Man könnte auch den ganz umständlichen weggehen die Leute zwar PHP Files hochladen zu lassen, denen aber in den ersten drei Zeilen ein
<?php
die();
?>
anzufügen.
Dan liest man per Hauptscript diese Seiten aus, entfernt die ersten drei Zeilen und parsed das Script selbst nach etwaigen verbotenen Scripts.
Oder man parsed sie gleich beim speichern und macht das ganze dann so...^^
Damit könnte man beispielsweise Schreibfunktionen usw verbieten.. ist aber wie gesagt sehr umständlich...
@Moritzpeuser:
Es gibt in der php.ini einen Eintrag namens disallow_function( oder so ähnlich). Dort kann man ohne Probleme Funktionen verbieten... die werden dann nicht verfügbar.
Beitrag geändert: 19.7.2008 15:26:59 von adrians -
Man könnte auch den ganz umständlichen weggehen die Leute zwar PHP Files hochladen zu lassen, denen aber in den ersten drei Zeilen ein
<?php
die();
?>
anzufügen.
Dan liest man per Hauptscript diese Seiten aus, entfernt die ersten drei Zeilen und parsed das Script selbst nach etwaigen verbotenen Scripts.
Oder man parsed sie gleich beim speichern und macht das ganze dann so...^^
Damit könnte man beispielsweise Schreibfunktionen usw verbieten.. ist aber wie gesagt sehr umständlich...
Joa, das Problem dabei ist, dass es sehr kompliziert ist, eine Funktion nach verbotenen Pfaden zu durchforsten. Denn er könnte ja statt z.B. fopen(\'../system/someimportantfile\',\'r\'), auch etwas wie fopen(\'../someopendir/../../system/someimportantfile\',\'r\') oder so schreiben. Und wenn man dann so etwas untterbunden hat, muss man auch noch gegen Dinge wie fopen($_POST(\'Formular_eingegebener_Pfad\')) tun, und dann gegen Dinge wie aus Dateien, Datenbanken, ... gelesenen Pfaden. Die Möglichkeiten sind schier unbegrenz. Das einzige, was übrig bliebe wäre, alle Dateisystemfunktionen manuell durch eigene Funktionen zu ersetzen, die dann den übergebenen Pfad prüfen (dann ist egal wie sehr der Pfad bei der Eingabe verstümmelt wurd), was ich eh vorhatte - aber eigentlich nur in der Frontend-Umgebung. Der öffentliche Skriptordner sollte sich halt gerade dadurch auszeichnen, dass er ohne etwaige Manipulationen die richtigen fertigen Skripte enthält... wäre halt schön, wenn das ginge, dass man einerseits keine Manipulationen an den Skripten ausserhalb des Ordners vornehmen müsse, sie aber trotzdem irgendwie nicht auf den Ordner zugreifen können... Bin aber auch schon nahe dran, aufzugeben...
Ich bin mir nicht sicher ob das klappt (ich kann kein PHP), aber du könntest versuchen fopen(); in der php.ini zu deaktivieren.
Also, i.A. wird kein Zugriff auf die php-ini gegeben sein und auch ganz abgesehen davon: man braucht die funktion ja schon ab und zu mal ;)
Aber per .htaccess sollte es gehen. Denn ich glaube PHP muss auch diese Barriere überwinden.
Nope, ich schütze meine PHP-includes immer per .htaccess. D.h. etwas wie include(\'../system/somesystemfile.php\'); lässt sich auf keinen Fall damit unterbinden und fopen vermutlich dann auch nicht. ;) -
Und chmod schützt auch vor PHP-Skripten, soweit ich weiß (sonst wäre es wohl kaum auf manchen Servern nötig php erst mit chmod den Schreibzugriff zu verbieten), bietet nur leider nicht die Möglichkeiten die ich brauche. Man kann nur bestimmten Usern oder Usergruppen den Zugriff zu bestimmten Ordnern verwehren, das bringt mir aber Null, da sowohl die Skripts innerhalb, als auch die Skripts ausserhalb des Systemordners aufgeführt werden müssen, nur sollen sie eben voneinander getrennt werden.
Soweit ich abschätzen kann, helfen dir chmod(), chown() und Kollegen nur weiter, wenn dein PHP im CGI-Modus läuft. Sobald du PHP als Server-API-Modul benutzt, kannst du das alles vergessen. Dann gehört das Script immer dem gleichem Nutzer, je nachdem wie der Admin das Ganze eingestellt hat, dem Webserver oder jemand anderem.
Eine Möglichkeit, den Zugriff auf höhergelegene oder \"daneben liegende\" Verzeichnisebenen zu verhindern, wäre die open-basedir-Einstellung in der php.ini. Wenn du benutzerdefinierte Einstellungen per .htaccess verwenden darfst, könntest du damit für jeden Benutzer ein Basisverzeichnis erstellen, innerhalb dessen sich der Benutzer austoben kann. An Pfade außerhalb kommt er nicht mehr ran (es sei denn er findet einen der zahlreichen Bugs in PHP).
http://de.php.net/manual/de/features.safe-mode.php#ini.open-basedir
http://de.php.net/manual/de/configuration.changes.php#configuration.changes.apache
Eine andere Möglichkeit wäre eventuell die Einrichtung eines separaten virtuellen Hosts für jeden Benutzer (so wie das auch bei Lima läuft). Da musst du dich aber mit der Serverkonfiguration herumschlagen.
-
Müsste nicht folgendes reichen, um nur localen Zugriff auf den Ordner zu gelangen:
<Directory /var/www/htdocs/pfad/zum/ordner/> Order Allow, Deny Allow from localhost Deny from all </Directory>
Ansonsten würde ich wie alopex vorgeschlagen hat einen VHost einrichten, dort routet man die URL auf einen Unterordner und sperrt die anderen Ordner für den öffentlichen Zugriff (auch per Order Allow, Deny).
Beitrag geändert: 22.7.2008 12:24:40 von trueweb -
Hm, ist leider bisher alles nicht das wahre...
auch open-basedir hat das Problem, eine globale Einstellung zu sein, wenn ich den Text richtig verstanden habe, also man kann nur einschränken, worauf PHP insgesamt Zugriff hat, und nicht einzelne Skriptbereiche abschotten, oder habe ich da etwas falsch verstanden? Wenn ja, kannst du das vielleicht genauer erklären?
Müsste nicht folgendes reichen, um nur localen Zugriff auf den Ordner zu gelangen:
<Directory /var/www/htdocs/pfad/zum/ordner/>
Order Allow, Deny
Allow from localhost
Deny from all
</Directory>
Ansonsten würde ich wie alopex vorgeschlagen hat einen VHost einrichten, dort routet man die URL auf einen Unterordner und sperrt die anderen Ordner für den öffentlichen Zugriff (auch per Order Allow, Deny).
Ich möchte ja nicht nur lokalen Zugriff erlauben. Ich möchte bestimmte Verzeichnisse als \"PHP-jail\" einrichten, bzw. einen bestimmten Ordner in der Art schützen, dass auf ihn nur Zugriffe von innerhalb des Ordners möglich sind. Über den Host komm ich da wohl kaum weiter, oder?
Auf jeden Fall danke für die Hilfe, erstmal. -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage