PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : [PHP] global



Maisaffe
26.07.2006, 22:30
Ich habe unter Google und hier im Board nicht wirklich etwas zu meinem momentanen Problem gefunden, es geht um das [global]isieren von Variablen.

Ich habe in Erinnerung, dass davon geredet wurde, dass die Welt einstürzt wenn man eine Variable als [global] definiert in einer [function]. Das Problem daran ist, das ich [global]s eigentlich ganz nett finde.

Ist das Problem an den [global]s jetzt nur die Sicherheit, in Form von „hier globalisieren wird und schmeißen die Variable einfach mal so in den mysql_query“ oder hat das noch tiefere Gründe?

Zu dem mysql_query:
Ich befolge da in der Regel folgenden Rat (http://www.shredzone.de/articles/php/sqlinject/?SID=4fq1ps5km43nfbhupe2esno694) gegen [SQL Injection].
Gibt es da noch etwas hinzuzufügen oder kann ich das als „extrem“ sicher im Raum stehen lassen?

Mit freundlichen Gruß ;)

dead_orc
26.07.2006, 23:06
Öhm, ich versteh nicht wirklich, was SQL Injections mit globalisierten Variablen zu tun haben sollen. Generell würde ich zwar eher dazu neigen, die Variable als Parameter an die Funktion zu übergeben (ggf. als Referenz), weil ich das irgendwie einfach sauberer finde, aber ich sehe keinen Grund, warum man eine globalisierte Variable nicht in einem mySQL Query verbauen sollte (besonders wenn man sie entsprechend verarbeitet vorher).

mitaki
27.07.2006, 08:38
Ist das Problem an den [global]s jetzt nur die Sicherheit, in Form von „hier globalisieren wird und schmeißen die Variable einfach mal so in den mysql_query“ oder hat das noch tiefere Gründe?
Ein großer Nachteil von global ist meiner Meinung nach, dass sich die globalisierten Variablen zu schnell wieder ändern können. Änderst du eine Variable, musst du sie auch x-Mal innerhalb deiner Funktion ändern, wo du welche übersehen könntest.
Wie dead_orc sagte, wären Paramenterwerte hier besser geeignet.
Aber eventuell interessiert dich auch der Geltungsbereich von Variablen (http://de3.php.net/manual/de/language.variables.scope.php).

Da es dir um die Sicherheit geht: Ob du nun einen Parameterwert oder eine globale Variable unbearbeitet in den SQL String einfügst ist identisch unsicher.


Ich befolge da in der Regel folgenden Rat gegen [SQL Injection].
Gibt es da noch etwas hinzuzufügen oder kann ich das als „extrem“ sicher im Raum stehen lassen?
"Extrem sicher" ist ein Begriff, den man eigentlich nicht verwenden kann. Wenn du alles machst, um die guten von den schlechten zu unterscheiden kannst du aber von guter Verteidigung sprechen.

Jesus_666
28.07.2006, 17:01
Ein großer Nachteil von global ist meiner Meinung nach, dass sich die globalisierten Variablen zu schnell wieder ändern können. Änderst du eine Variable, musst du sie auch x-Mal innerhalb deiner Funktion ändern, wo du welche übersehen könntest.
¿Qué? Das Problem hat man bei Literalen, aber nicht bei globalen Variablen - es liegt in der Natur einer Variable, daß sie immer den aktuellen Wert hat, wenn man sie abfragt (solange man nicht schlecht multithreadet)...

Falls du meinst, daß der Variablenname sich ändert, so empfehle ich, dir Refactoring anzugewöhnen - und wenn es nur die lo-fi-Version ist, bei der man seinen Texteditor $name1 durch $name2 ersetzen läßt.


@d_m: Hat es eigentlich einen tieferen [Sinn], daß du willkürlich Wörter in [Klammern] setzt, abgesehen davon, daß du deine Liebe zu Wikis zum Ausdruck bringst?

Maisaffe
28.07.2006, 17:23
@d_m: Hat es eigentlich einen tieferen [Sinn], daß du willkürlich Wörter in [Klammern] setzt, abgesehen davon, daß du deine Liebe zu Wikis zum Ausdruck bringst?Ich finde das irgendwie übersichtlich.
Wobei ich das mit der Liebe zu Wikis garnicht gemerkt hatte. :D

mitaki
28.07.2006, 17:55
Falls du meinst, daß der Variablenname sich ändert, so empfehle ich, dir Refactoring anzugewöhnen - und wenn es nur die lo-fi-Version ist, bei der man seinen Texteditor $name1 durch $name2 ersetzen läßt.
Ja, das war gemeint und, das muss ich mir nicht mehr angewöhnen, ich mach das dauernd ._.
Toll finde ich das aber nicht unbedingt, auch ohne global.