Sicherheitslücken
Tanja
- php
0 Christian Kruse0 Cheatah0 Christian Kruse0 Bio0 Christian Kruse0 ich
0 gr@phics.de
Hi alle zusammen,
ich bastel viel und gerne in PHP und erst kürzlich wurde mein Forum (es ist das phpbb) gehackt. Nunfrag ich mich, wie konnten die in den Adminteil eindringen ? Worauf muss man achten, um sicher zu sein ?!
Eure -Tanja-
Hoi,
ich bastel viel und gerne in PHP und erst kürzlich wurde mein Forum
(es ist das phpbb) gehackt. Nunfrag ich mich, wie konnten die in den
Adminteil eindringen ? Worauf muss man achten, um sicher zu sein ?!
Nun, das ist kein triviales Thema mehr. Dazu gibt es viele Artikel.
Das Wichtigste vielleicht im Ueberblick:
Variablen *immer* initialisieren! Nicht-Initialisierte Variablen
koennen in PHP zu unvorhergesehenen Ergebnissen fuehren (Stickwort:
Importierung von URL-Parametern in den globalen Namensraum).
User-Eingaben *immer* validieren! Nicht-validierte User-Eingaben
sind in jeder Sprache ein Problem. Die koennen zu "einfachen"
Sachen wie dDoS bis hin zu ernsthaften Problemen fuehren.
Passwoerter *immer* am besten verschluesselt oder, falls das nicht
moeglich ist, per POST uebertragen. Aber auf KEINEN Fall per GET.
Unverschluesselte Passwoerter werden im Klartext ueber das Internet
geschickt und koennen im Grunde ueberall mitgeloggt werden. Bei
einer GET-Uebertragung tauchen sie zusaetzlich noch in allen
moeglichen und unmoeglichen Logdateien auf.
Nach jedem Login wieder ausloggen! Wartest du auf einen
Session-Timeout, statt dich auszuloggen, kann deine Session-ID
benutzt werden, um Administrations-Zugriff zu erlangen.
Bei *allen* hoehoergestellten Funktionen sicherstellen, dass der
User, der sie ausloest, auch die Rechte dazu hat! Dazu gehoert auch
eine eindeutige Identifikation.
Tja, mehr faellt mir jetzt aus dem Stand auch nicht ein, sorry.
Aber mit der Zeit solltest du selbst ein Gespuehr dafuer entwickeln
und "wissen", was sicher oder unsicher ist.
Gruesse aus dem schoenen LH,
c.j.k
Hi,
Tja, mehr faellt mir jetzt aus dem Stand auch nicht ein, sorry.
mir auch nicht - das ist schon mehr, als ich genannt hätte. Den ersten Punkt möchte ich aber noch etwas deutlicher machen:
- Variablen *immer* initialisieren! Nicht-Initialisierte Variablen
koennen in PHP zu unvorhergesehenen Ergebnissen fuehren (Stickwort:
Importierung von URL-Parametern in den globalen Namensraum).
Insbesondere heißt das: *Kompletter* Verzicht auf "magische" Variablen mit nicht allgemein(!) feststehendem Namen, besonders auf die schon erwähnten URL-Parameter, aber auch Environment-Werte wie $HTTP_REFERER etc. Benutze je nach Bedarf $HTTP_GET_VARS, $HTTP_POST_VARS und die Funktion getenv().
Aber mit der Zeit solltest du selbst ein Gespuehr dafuer entwickeln
und "wissen", was sicher oder unsicher ist.
Genau. Meminisse: Sicherheit ist kein Ziel, sondern ein Weg. Es ist nicht möglich, ein System _sicher_ zu machen - Du kannst es nur immer _sicherer_ gestalten. Von Anfang an bei jedem Schritt am Ball zu sein ist das Geheimnis.
Cheatah
Hoi,
- Variablen *immer* initialisieren! Nicht-Initialisierte
Variablen koennen in PHP zu unvorhergesehenen Ergebnissen
fuehren (Stickwort: Importierung von URL-Parametern in den
globalen Namensraum).
Insbesondere heißt das: *Kompletter* Verzicht auf "magische"
Variablen mit nicht allgemein(!) feststehendem Namen, besonders auf
die schon erwähnten URL-Parameter, aber auch Environment-Werte wie
$HTTP_REFERER etc. Benutze je nach Bedarf $HTTP_GET_VARS,
$HTTP_POST_VARS und die Funktion getenv().
Nun, in Bezug auf die GET- und POST-Parameter das sehe ich etwas
anders. Ich glaube, es reicht, die User-Eingaben (also die GET- und
POST-Variablen) zu validieren. Allerdings muss ich dir recht geben,
wenn du sagst, Scripte, die $HTTP_POST_VARS, $HTTP_GET_VARS und
$HTTP_POST_FILES benutzen, sind besser lesbar. Dasselbe gilt IMHO
fuer $HTTP_SESSION_VARS und getenv().
Aber mit der Zeit solltest du selbst ein Gespuehr dafuer
entwickeln und "wissen", was sicher oder unsicher ist.
Genau. Meminisse: Sicherheit ist kein Ziel, sondern ein Weg.
Netter Spruch ;-)
Gruesse aus dem schoenen LH,
c.j.k
Sup!
Also, ich kenne eine PHP Seite, die bastelt das Seiten-Layout mit einem PHP-Skript, den jeweiligen Inhalt der Seite kann man per Parameter angeben. Dieser Parameter sollte eigentlich auf eine lokale Seite zeigen, aber entfernte URLs gehen auch - damit kann man beliebigen PHP-Code mit den Rechten der PHP-Seite ausführen lassen... tja... seit einigen Tagen stehen merkwürdige Nachrichten in den News dieser Seite...
Gruesse,
Bio
Hoi,
Also, ich kenne eine PHP Seite, die bastelt das Seiten-Layout mit
einem PHP-Skript, den jeweiligen Inhalt der Seite kann man per
Parameter angeben. Dieser Parameter sollte eigentlich auf eine
lokale Seite zeigen, aber entfernte URLs gehen auch
Der fdopen-Wrapper schlaegt zu ;-)
- damit kann man beliebigen PHP-Code mit den Rechten der PHP-Seite
ausführen lassen... tja... seit einigen Tagen stehen merkwürdige
Nachrichten in den News dieser Seite...
Darum sage ich, man muss *alle* Parameter validieren.
Gruesse aus dem schoenen LH,
c.j.k
Sup!
Also, ich kenne eine PHP Seite, die bastelt das Seiten-Layout mit einem PHP-Skript, den jeweiligen Inhalt der Seite kann man per Parameter angeben. Dieser Parameter sollte eigentlich auf eine lokale Seite zeigen, aber entfernte URLs gehen auch - damit kann man beliebigen PHP-Code mit den Rechten der PHP-Seite ausführen lassen... tja... seit einigen Tagen stehen merkwürdige Nachrichten in den News dieser Seite...
:-)
Tja sowas passiert. Ich weis von einer Seite wo man die Möglichkeit hat, als Besucher Bilder hochzuladen - Das ist zumindest das, was man damit machen soll. Pech nur, das auch PHP Dateien beliebiger sorte hochladbar sind. Es kamen dann z.B. erstaunliche Meldungen im Forum vor, von Leuten, die es entweder gar nicht gab, oder aber die steif und fest behaupten niemals einen derartigen Text geschreiben zu haben. Das Forum benutzt eine MySQL Datenbank...
Wie man nun die Möglichkeit PHP Dateien hochzuladen und auszuführen nutzt um an den Benutzernamen und das Passwort des Datenbankusers für das Forum zu gelangen, überlasse ich dem Ideenreichtum des Lesers...
Dann gab es noch die eine oder andere Änderung an Bildern und sonstigen Inhalten der Seite...
Alles nur wegen eines schlecht gemachten Upload-scripts...
bye
ich
Gudde!
- Variablen *immer* initialisieren! Nicht-Initialisierte Variablen
koennen in PHP zu unvorhergesehenen Ergebnissen fuehren (Stickwort:
Importierung von URL-Parametern in den globalen Namensraum).
Insbesondere heißt das: *Kompletter* Verzicht auf "magische" Variablen mit nicht allgemein(!) feststehendem Namen, besonders auf die schon erwähnten URL-Parameter, aber auch Environment-Werte wie $HTTP_REFERER etc. Benutze je nach Bedarf $HTTP_GET_VARS, $HTTP_POST_VARS und die Funktion getenv().
Ich komme mir gerade irgendwie bloede vor, weil ich seit zwei Jahren mit PHP programmiere, aber irgendwie die obenstehenden Zeilen ueberhaupt nicht raffe, wahrscheinlich habe ich immer einfach zu lax programmiert. Ich waere aber doch ziemlich froh ueber ein klitzekleines Quelltext, was denn "magische", "nicht-initialisierte" und Variablen mit "nicht _allgemein_ feststehenden Namen" gemeint sind. Redet ihr von den $$vars?
Und was bieten sich denn dort fuer Sicherheitsluecken?
Gruesse
gr@phics.de