Moin!
ich freue mich nun auf einen weiteren Beitrag von Sven Rautenberg zum Thema PHP und Anfängerfehler und PHP und Sicherheit!
Und das mein ich wirklich Ernst!
Meinen Beitrag recherchierst du bitte im Archiv.
Und das mein ich wirklich _nicht_ ernst. :)
Aber da steht mit Sicherheit viel drin, was nur mal gesammelt werden müßte.
Dummerweise fällt mir spontan gerade nicht sonderlich viel ein. Es ist immer leichter, aus Sicherheitssicht heraus zu argumentieren, etwas würde Lücken haben, als so rein theoretisch zu argumentieren.
Die typischen Probleme mit register_globals sind schon erwähnt worden. Es sei hierbei angemerkt, dass diese Option ein sehr zweischneidiges Schwert für PHP-Programmierer ist. Eigentlich sind die Verhältnisse nur geklärt, wenn register_globals=on zwingend ist! Dann ist man sich als Programmierer bewußt, dass man in unsicheren Gefilden agiert und ausnahmslos jede Variable, die man verwendet, vorher initialisieren muß. Geht man aber von der Stellung "off" aus, dann kann man viel leichter schlampen und bei dann doch aktiviertem register_globals die größten Probleme kriegen.
Deshalb wichtig: Auf dem Entwicklungsserver sollten wirklich _ALLE_ Fehlerlevel ausgegeben und beseitigt werden, auch die NOTICE, die bei nicht initialisierten Variablen ausgegeben wird. Standardmäßig wird NOTICE aber leider nicht ausgegeben, sondern unterdrückt. Und damit hätten wir schon den zweiten Punkt, den man bei Skripten prüfen sollte. Ein gutes Skript gibt keine NOTICE aus.
Punkt drei, den ich als Entwickler ärgerlich finde, weil er zu mehr Problemen führt, als er löst, sind magic_quotes_gpc! Auch diese Option kann ein oder ausgeschaltet sein. Ich bin mittlerweile der Meinung, sie müßte ganz dringend und zwingend auf AUS gesetzt sein. Typischerweise will man Daten eher selten in Datenbanken schreiben. Und selbst da ist das Escape-Zeichen nicht zwingend der Backslash - die Sybase-Quoting-Option ist ein gutes Beispiel dafür.
Addslashes() ist also für Datenbanken ziemlich nutzlos. Und es ist nervig, mit stripslashes() erst alle übergebenen Daten zurückzuwandeln.
Aber dadurch ergibt sich eine schöne Fehlerquelle. Wenn der Entwickler von magic_quotes_gpc=on ausgegangen ist, auf dem Server aber off eingestellt ist, oder auch umgekehrt, dann wird das zu mehr oder weniger Chaos führen.
Summa summarum: PHP hat zwei ziemlich unrühmliche Punkte, die das Leben des Programmierers nicht leicht machen. Es gilt hier besonders, auf die Servereinstellungen zu achten oder sie (z.B. mit .htaccess-Konfiguration) explizit vorzuschreiben. Entsprechend groß ist an diesen Punkten, die leider alle Skripte betreffen, die es gibt, das Fehlerpotential.
- Sven Rautenberg
ss:) zu:) ls:[ fo:} de:] va:) ch:] sh:) n4:# rl:| br:< js:| ie:( fl:( mo:|