PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Verzeichnisschutz Apache und PHP


xDragonx
08.11.2004, 19:35:21
Halli Hallo



Wie kann ich bewirken das php scripte nur in dem verzeichnis ( und unterverzeichnisse ) funktioniert und wirksam ist in dem es auch gespeichert wurde.

Ich versuch mal mein problem genauer zu schildern. Es gibt in PHP programierte Scripte (dateibrowser). Eines davon habe ich bei mir installiert. Ich habe solange auf die "button gedrückt" ( die bewirkt das die übergeordnete ordner angezeigt werden ), bis ich auf einmal meine ganze Festplatte vor mir hatte. Ich konnte mich in jedes verzeichnis auf mein laufwerk bewegen. Und sogar gewisse dateien einsehen.
So was ist doch gefährlich denke ich.

Ich wollte das verhindern, und zwar so, das der script wirklich nur zugriff auf den verzeichnis ( und unter verzeichnisse ) in dem es auch installiert wurde.

Ich habe nachgeforscht. im php.ini gibt es open_basedir. Da gebe ich nun das verzeichis an in dem der script installiert wurde, und der script kann nur in dem verzeichniss datei operationen durchführen.

Das ist soweit in ordnung. Was mache ich wenn ich 3 oder 4 verzeichnisse isolieren will. php.ini akzeptiert nur eine verzeichnis angabe.

In der Apache configuration soll das auch möglich sein, auch mit mehreren verzeichnissen. Aber ich habe leider keine anleitung gefunden.

Kann mir jemand helfen.

c4
09.11.2004, 08:24:15
Bau einfach an passender Stelle eine Abfrage rein, ob das ausgewählte Verzeichnis noch in der erlaubten Ebene liegt und verbietest gegebenenfalls die weitere Ausführung: $bis_zu_der_ebene_ist_es_erlaubt='/var/www/domain1/geheim/';
$aktueller_pfad=substr($_SERVER['PHP_SELF'], 0, strrpos($_SERVER['PHP_SELF'], '/'));
if (!strstr($aktueller_pfad, $bis_zu_der_ebene_ist_es_erlaubt)) {
echo 'Schuft!';
}
else {
echo 'Lieb!';
} Hab's nicht getestet, aber das sollte ganz wirksam sein.

xDragonx
09.11.2004, 14:41:50
danke sehr, das ist aber nicht das was ich suche.
Ich versuche gerade ein script archiv zusammenzustellen, wo auch andere user scripte uploaden können. Da ich aber nicht jedes upgelodedes script testen kann, wie weit es geht sollte das schon in apache webserver konfiguriert sein.

Ich habe hier schon eine Lösung.
Hier sind paar zeilen die den php sicherer machen sollen, und benehmen beibringen.

einfach folgende zeilen ins apache config datei eintragen.

php_admin_value open_basedir /var/www/user1/user1-1.tld/
php_admin_value upload_tmp_dir /var/www/user1/user1-1.tld/temp
php_admin_value session.save_path /var/www/user1/user1-1.tld/temp/

natürlich kann dies auch für jeden virtuelen verzeichnis bzw. viertuelen server gemacht werden. Nur mus es inner halb der definition stehen.

Und in PHP.ini

folgende zeilen ändern.

php_admin_value safe_mode on

disable_functions=system,exec,passthru,popen,escapeshellcmd,shell_exec


Ich weis halt nicht, ob das sicher ist,
vielleicht hat ja noch jemand ideen.
Bitte wenn noch jemand ideen zur php und sicherheit hat einfach posten


Danke trotzdem

c4
09.11.2004, 14:46:16
Original geschrieben von xDragonx
Und in PHP.ini

folgende zeilen ändern.

php_admin_value safe_mode on
disable_functions=system,exec,passthru,popen,escapeshellcmd,shell_exec

Ich weis halt nicht, ob das sicher ist Also damit bist Du doch sehr sicher dran!