PHPGangsta - Der praktische PHP Blog

PHP Blog von PHPGangsta


Archive for the ‘Sicherheit’ tag

Passwortrichtlinien, was tun und was nicht?

with 54 comments

Vor kurzem bin ich wieder auf das leidige Problem „Passwortrichtlinien“ gekommen.

Erster Punkt: Xing
Das Minimum für das Passwort bei Xing beträgt 4 Zeichen. Von einer Pflicht, doch mindestens eine Zahl oder ein Sonderzeichen oder Großbuchstaben zu verwenden weit entfernt. Ist das nicht eine Einladung für Hacker/Cracker?

Zweiter Punkt: NGZ
Bei NGZ habe ich einen Account, um den Rootserver eines Bekannten zu administrieren. Immerhin können dort zusätzliche Accounts eingerichtet werden, und der Besitzer muss nicht seinen Login weitergeben. Allerdings wurde mir bei Benutzung der „Passwort vergessen“ Funktion mein Original Passwort per Email zugesandt! Sprich, Passwörter stehen dort im Klartext in der Datenbank, und sie werden in unverschlüsselten E-Mails durch das Internet geschickt und wohlmöglich von einigen per unverschlüsseltem WLAN abgeholt. Dann nützt auch https nichts für die Webseite.

Dritter Punkt: Sparkasse
Ich weiß ja nicht wie es bei euch ist, aber bei meiner Sparkasse muss man ein exakt 5-stelliges Passwort angeben. Das schränkt die Möglichkeiten sehr stark ein und ein wirklich sicheres Passwort ist damit nicht möglich. Selbst die Sonderzeichen sind auf öäüÖÄÜß beschränkt, warum nicht die anderen Sonderzeichen wie ()$%#+ usw? Warum zum Teufel tut das eine Bank?

Wie lauten eure Passwortrichtlinien, privat oder beruflich? Welche Schranken haltet ihr für zu niedrig und welche sind evtl. auch zu hoch? Wie speichert ihr Passwörter in der Datenbank, im Klartext, MD5/SHA1 gehasht, mit Salt oder ohne, oder sogar mehrfach gehasht? Welche „Passwort-vergessen“ Funktionalität haltet ihr für sinnig und welche für sinnlos bzw. sogar gefährlich?

Written by Michael Kliewe

April 15th, 2011 at 10:30 am

Gefährliche PHP-Funktionen ausschalten

with 23 comments

PHP ist mächtig, man kann nahezu alles umsetzen, zur Not auch mit Zugriff auf die Kommandozeile. Doch die Macht hat auch immer eine böse Seite, sie kann missbraucht werden. Nicht nur auf shared Webservern sollte man aus Sicherheitsgründen einige Funktionen ausschalten, auch auf einem einzelnen Server, auf der nur die eigene Webseite liegt, sollten die gefährlichsten Funktionen im Normalfall abgeschaltet werden (können). Falls ein Eindringling es schafft, eigenen PHP-Code hochzuladen, wäre er sehr eingeschränkt in seinen Möglichkeiten, viel kaputt zu machen, Daten auszuspähen oder sonstige böse Sachen auf unserem Server zu veranstalten.

Natürlich gibt es noch viele weitere Sicherheitsmaßnahmen, die man ergreifen sollte. Der Safe-Mode wird ja bald abgeschafft, kann und sollte also nicht mehr genutzt werden. Stattdessen sollten open_basedir, disable_classes und disable_functions genutzt werden.

Natürlich ist es auch ein guter Rat, immer eine aktuelle Version von PHP zu verwenden, seine Scripte abzusichern (Directory-Traversal, Code-Injection, Dateiuploads auf PHP-Code zu überprüfen, Remote-File-Inclusion etc. etc.), um einen Eindringlich erst gar nicht reinzulassen, aber das soll hier heute nicht das Thema sein.

Hier geht es also um disable_functions. Wir können in der php.ini PHP-Funktionen abschalten, die wir nicht benötigen und evtl. einem Eindringlich helfen, Schaden anzurichten. Welche Funktionen sollten deaktiviert werden? Ich habe hier mal eine Liste, über die wir diskutieren können:

disable_functions = „apache_child_terminate, apache_get_modules, apache_get_version, apache_getenv, apache_note, apache_setenv, curl_exec, curl_multi_exec, define_syslog_variables, disk_free_space, diskfreespace, dl, error_log, escapeshellarg, escapeshellcmd, exec, ftp_connect, ftp_exec, ftp_get, ftp_login, ftp_nb_fput, ftp_put, ftp_raw, ftp_rawlist, ini_alter, ini_get_all, ini_restore, link, mysql_pconnect, openlog, passthru, pfsockopen, php_uname, phpinfo, popen, posix_getpwuid, posix_kill, posix_mkfifo, posix_setpgid, posix_setsid, posix_setuid, posix_uname, proc_close, proc_get_status, proc_nice, proc_open, proc_terminate, set_time_limit, shell_exec, symlink, syslog, system, tmpfile, virtual

shell_exec verbietet auch gleich das Ausführen von Systembefehlen via Backticks (´).

Einige davon sind sicherlich gefährlicher als andere, und einige werden sogar vielleicht im ein oder anderen Projekt dringend gebraucht, sodass sie aus der Liste rausgenommen werden müssen. Als ich diese Liste erstellt habe musste ich feststellen dass ich mehr als ein Dutzend der Funktionen nicht kannte, es ist also sehr zu empfehlen sich mal ein paar davon anzuschauen.

Welche Funktionen verbietet ihr in der php.ini?

Written by Michael Kliewe

Januar 14th, 2011 at 9:05 am

Posted in PHP

Tagged with , , ,