PHP Sicherheitsaspekt

vanedler

Well-Known Member
Hallo,

vielleicht kennt das schon jemand:

FreeBSD 5.2.1, Apache mit PHP4, Multidomainhosting. Blöderweise ist es ziemlich einfach als user ein PHP-Skript zu schreiben, mit dem man dann alle Inhalte anderer user auslesen kann. Beispiel: http://www.booji.com/designs/read.php

Hier habe ich als user www505 die Dateien des users www506 ausgelesen. Das finde ich gar nicht gut. Ich habe mal in der php.ini nachgesehen. Dort kann man die einzubeziehenden Verzeichnisse z.B. aus ./ begrenzen.
Nachteil, php kann nicht mehr in Übergeordnete Verzeinissen arbeiten, logisch...
Gibt es noch andere Möglichkeiten, wie ich user auf ihr eigenes Verzeichnis, also z.B. public_html beschränken kann?

Viele Grüße,
Vanessa
 
ich habe da mal was machen müssen für die arbeit. vielleicht hilft dir das:

; open_basedir, if set, limits all file operations to the defined directory
; and below, including the file itself. This directive is not affected
; by whether Safe Mode is turned On or Off.
; By default this it is set to "." which means that this allows access to files
; that are in current working directory.
; By default this is also set to "sys:/tmp". This is actually the value that is
; set for the below mentioned "upload_tmp_dir" directive. If "upload_tmp_dir" is
; changed, change the same for "open_basedir" also. This is done to allow
; phpMyAdmin application users to execute SQL commands through an SQL file.

empfohlen: open_basedir = "/srv/www/htdocs"

- verhindert zugriff auf gesamte festplatte

---------------------------------------------------------------------------------

; Temporary directory for HTTP uploaded files (will use system default if not
; specified).

empfohlen: upload_tmp_dir = "/srv/www/tmp"

- sonst bringt open_basedir auch nix, da tmp wieder in nem anderen pfad liegt

---------------------------------------------------------------------------------


; Safe Mode

empfohlen: safe_mode = On

- passt also

---------------------------------------------------------------------------------


; Magic quotes for incoming GET/POST/Cookie data.

empfohlen: magic_quotes_gpc = On

- Anführungszeichen und Hochkommas aus

---------------------------------------------------------------------------------

; Whether to allow the treatment of URLs (like http:// or ftp://) as files.

empfohlen: allow_url_fopen = No

- Lädt keine Webseiten auf entfernten Servern (Manipulierte URLs)

---------------------------------------------------------------------------------

; This directive allows you to disable certain functions for security reasons.
; It receives a comma-delimited list of function names. This directive is
; *NOT* affected by whether Safe Mode is turned On or Off.

empfohlen: disable_functions = system, exec, shell_exec, passthru, phpinfo, show_source


- keine Linuxkommandos mehr zulassen da diese mit rechten des Webservers laufen

---------------------------------------------------------------------------------


; When safe_mode is on, only executables located in the safe_mode_exec_dir
; will be allowed to be executed via the exec family of functions.

empfohlen: safe_mode_exec_dir = "/srv/www/bin"


- wird nur dann gemacht, wenn exec (siehe oben) gebraucht wird

---------------------------------------------------------------------------------


; Whether or not to register the EGPCS variables as global variables. You may
; want to turn this off if you don't want to clutter your scripts' global scope
; with user data. This makes most sense when coupled with track_vars - in which
; case you can access all of the GPC variables through the $HTTP_*_VARS[],
; variables.
;
; You should do your best to write your scripts so that they do not require
; register_globals to be on; Using form variables as globals can easily lead
; to possible security problems, if the code is not very well thought of.

empfohlen: register_globals = Off


- bekannt...
 
daiv schrieb:
ich habe da mal was machen müssen für die arbeit. vielleicht hilft dir das:

:rolleyes: Ja gut, habe das

open_basedir = "/srv/www/htdocs"

ja auch schon mal probiert. Dann kann ich mit meinem Programm aber keine Dateien mehr auf anderen Useraccounts ändern. Das muss ich aber. Bei mir soll das so laufen:
Von meiner Webseite aus /srv/www/505/htdocs/ sollen per php andere Verzeichnisse und Dateine erstellt werden. Z.b. /srv/www/506/htdocs/index.php
Ich will nämlich so ne Art Homepagebaukasten für meine Kunden anbieten.
Die Kunden dagegen sollen mittels php nicht ausserhalb ./htdocs kommen können.

Schon ein Problem oder?
 
Guck dir mal den Suexec Wrapper an.
Oder installier ein zweites PHP als CGI, das nur Du benutzen kannst.
Oder lass eine zweite Instanz des Apaches laufen.

Gruss...

Der Indy
 
dann benutz webmin oder sowas. ist vielleicht einfacher wenn du nicht direkt am rechner sitzt?!
 
Dateisystem anderer Server mounten?

indy schrieb:
Guck dir mal den Suexec Wrapper an.
Oder installier ein zweites PHP als CGI, das nur Du benutzen kannst.
Oder lass eine zweite Instanz des Apaches laufen.

Gruss...

Der Indy

Ok das hört sich gut an. Ich glaube ich mache das so. Ich habe mehrere Server. Dann lasse ich meine Webseite auf einer seperaten Maschine laufen und die User auf einer anderen. Auf denen mache ich dann das was daiv empfolen hat.
Das ist dann glaube ich das sicherste.

Habt Ihr eine Idee, wie man das Dateisystem der Kundenserver dann in den "Steuer"-Server einbinden kann?
 
Erklärung

daiv schrieb:
wolltest du nicht genau das verhindern?

Nö, ich will verhindern, dass meine Kunden sich untereinader ausspionieren können.

Ich dagen muss per PHP-Skript Zugriff haben (Dateien anlegen/löschen). Jetzt wäre meine Lösung gewesen, dass ich meine Webseite auf Server A lege. Die Kunden liegen auf Server B, C, D, usw. Die www-Verzeichnisse der Server B,C,D, usw. werden dann ich das Dateisystem von Server A gemountet. Auf dem läuft dann Apache/PHP physikalisch getrennt von den Apache/PHP der Kundenserver.

Geht doch oder?
 
Du kannst bei den virtuellen Domains spezielle php inis einstellen
wie z.Bsp.

<VirtualHost *>
...
...
php_admin_value upload_max_filesize 6M
</VirtualHost>

Mach dann mal ein <? print phpinfo() ?> und schau mal was dann bei local value und master value steht
 
Toll! Danke!

Mr. Daemon schrieb:
Du kannst bei den virtuellen Domains spezielle php inis einstellen
wie z.Bsp.

<VirtualHost *>
...
...
php_admin_value upload_max_filesize 6M
</VirtualHost>

Mach dann mal ein <? print phpinfo() ?> und schau mal was dann bei local value und master value steht

:rolleyes: MMM... War mir auch neu ;-) siehe: http://www.vanedler.de/phpinfo.php
hat geklappt. Gibt es dazu eine Dokumentation??? Wäre nett.

Grüße,
Vanessa
 
vanedler schrieb:
:rolleyes: MMM... War mir auch neu ;-) siehe: http://www.vanedler.de/phpinfo.php
hat geklappt. Gibt es dazu eine Dokumentation??? Wäre nett.

Grüße,
Vanessa

Keine Ahnung ob es eine Doku gibt :rolleyes: .. Du hast jetzt zwei Möglichkeiten.
Wie die bei den virtuellen Domains. Schau Dir einfach die local and master values
an. Prinzip hast ja jetzt begriffen ;)
Du könntest aber jetzt auch in der php.ini den Master für safe aktivieren und nur bei
Deiner Domain den wiedre aufheben.

Oder

Auchnochmal gewisse Sachen für jedes Script
Und da weiss ich das es eine Doku gibt :D
http://de2.php.net/manual/de/function.ini-set.php
 
Zurück
Oben