Neulich wurde ich gebeten, mir "kurz" ein kleines PHP Skript anzusehen,
und bei der Fehlersuche zu helfen. Dabei ist mit allerdings sehr schnell
aufgefallen dass einige grundlegende Unschönheiten zu finden sind.
Daher will ich anhand des mir zugesandten Codes einige Tipps zur PHP Entwicklung
geben.
register_globals
Ein immer wieder auftrendes Problem ist die register globals Geschichte,
da PHP einem lange Zeit die Freiheit ließ, auf die POST Variable 'test' auf
zwei Arten zuzugreifen. Entweder als $test, oder per $_POST['test'].
Nutzt man erstere Variante kann man sich nie sicher sein, woher der
Inhalt der Variablen eigentlich stammt, und man vergisst leicht einen
vielleicht gefährlichen Inhalt zu escapen. Sofern die Möglichkeit besteht
ist es sogar empfehlenswert register_globals auszuschalten. Aber man
sollte es sich zumindest immer angewöhnen, auf POST/GET/REQUEST variablen
immer mittels den dafür vorgesehenen superglobalen Arrays zuzugreifen.
SQL Injections
Eine große Gefahr stellen vor allem im Zusammenhang mit register_globals
die SQL Injections dar, über die nicht gewollter SQL Code eingeschleußt
werden kann. Um hier nicht auszuschweifen sollte man sich immer angewöhnen,
Inhalt der manipuliert sein kann, zu escapen. Eine einfach Möglichkeit
hierzu bietet mysql_real_escape_string(). Man sollte sich wenigstens
angewöhnen den Inhalt immer zu escapen. Es empfiehlt sich auch eine
eigene Funktion dafür zu nehmen, dass man später auch noch andere
Verfahren einsetzen könnte, indem man nur eine Funktion überarbeiten
muss. Hier ein Beispiel:
CODE:
/**
* easy accesible handle to escape all db strings
* @param string $string string which should be escaped to be put into an sql statement
* @return string returns the escaped string
*/
function escapeDB($string)
{
global $run;
if(is_numeric($string))
{
return $string;
} else {
return $run['db']->qstr($string,get_magic_quotes_gpc());
}
}
Variablen
Man sollte Variablen immer klein schreiben, und Umlaute sollten nicht
eingesetzt werden. Es ist meist auch recht angenehm die äquivalente englische
Bezeichnung für Variablen zu verwenden. EIn unschönes Beispiel:
CODE:
'$Arbeitsverhaeltnis', '$Kündigungsfrist', '$Sonstiges'
Fehlermeldungen
Fehlermeldungen sollte man am besten immer beherzigen. PHP kennt verschiedene
Modi, je nach "wichtigkeit" eines Fehlers. Meist werden die NOTICE's
ausgeblendet. Allerdings sind NOTICES oft auch recht hilfreich,
da man erkennt wo man z.B. eine noch nicht initialisierte Variable
verwendet. Es empfiehlt sich meistens alle Fehlermeldungen anzuzeigen.
Die macht man wie folgt:
CODE:
error_reporting(E_ALL);
Vor allem gefährlich ist das manuelle Unterdrücken von Fehlermeldungen
mittels dem @ Operator. Diesen sollte man auch nicht einsetzen, da dadurch
die Fehlersuche oft erschwert sein kann.
Dies mal nur als kurze Zusammenfassung.