phpbar.de logo

Mailinglisten-Archive

[php] Abändern alter PHP-Skripte (Zwischenergebnis 2)

[php] Abändern alter PHP-Skripte (Zwischenergebnis 2)

Sebastian Mendel lists at sebastianmendel.de
Don Jul 8 08:43:03 CEST 2004


Burkes schrieb:


> 1c) Alternativ kann man jedes $PHP_SELF im Text durch
> $_SERVER['PHP_SELF'] ersetzen.

nicht alternativ, dies sollte die primäre Verwendung sein!

alternativ, wenn wirklich unbedingt benötigt, kann man ja am Anfang des 
Scriptes $_SESSION['PHP_SELF'] setzen falls wirklich noch nicht vorhanden!

if ( '4.1.0' > phpversion() )
{
   $_SESSION =& $HTTP_SERVER_VARS;
}

auch in alten Scripten sollte man $HTTP_SERVER_VARS['PHP_SELF'] anstelle 
von von $PHP_SELF verwenden !


> 2)  Prüfen, ob alle Variablen im Text initialisiert sind
> 
> Alle Variablen, die sich auf (potentielle) Formularparametern oder
> Cookie-Parametern   beziehen, initialisieren. Zum Überprüfen kann man
> error_reporting auf E_ALL setzen und das Skript aufrufen, dort dann
> auf die Warnmeldung "Undefined Variable" achten.

Variablen sind _immer_ zu initialisieren!


> Dies sollte man aus Sicherheitsgründen auch dann tun, wenn die
> Error-Meldungen auf dem Online-Server unterdrückt werden
> (http://www.oreilly.de/catalog/progphpger/chapter/ch12.pdf) 
> (http://www.informatik.tu-cottbus.de/~tk/lehre/Skriptprogrammierung_WS
> 0203/Sicherheit_in_Webanwendungen.pdf)
> 
> Vorbemerkung zur Intialisierung
> 
>   $superuser = false;    // = Intialisierung einer True/False Variable
>   if (check_privileges( )) $superuser = true;
> 
> oder:
> 
>   $name="";  // = Intialisierung einer Stringvariablen
>   $name = $vorname." ".$nachname;
> 
> 
> 3) Die Übergabevariablen im Skript zu Beginn des Skripts oder bei
> jedem ersten Auftauchen umdefinieren:
> 
>     $name=""; // initialisieren
>     $name = $_SERVER['NAME]; // ab jetzt funktioniert $name wieder.
> 
> 
> Bei Übergabevariablen (Formularparameter, z.B.
> www.php.net/xyz.php?name=meier) besteht noch die Gefahr, dass die
> behandelte Variable gar nicht übergeben wurde und es zu einer
> Warnmeldung kommt. Daher ist obige Formel zu erweitern:
> 
>     $name="";
>     if (isset($_SERVER['NAME']) $name = $_SERVER['NAME];

solche zuweiseungen sollte man nicht machen, sie verschlechtern die 
Lesbrkeit des Codes

wenn externe Variablen verwendet werden dann sollten sie immer aus ihrem 
superglobalen Array heraus verwendet werden

eine Zuweisung ala:
$name = $_SERVER['NAME]

bringt keinen prkatischen Vorteil, spätere Verwendung von $name im 
Script verschleiert die Herkunft der Variable

es sollte im gesamten Script $_SERVER['NAME'] verwendet werden


> Alternative wäre, JEDES Auftauchen von "$name" durch $_SERVER['NAME']
> zu ersetzen, dann ist aber noch auf erstmalige Intialisierung zu
> achten und die IF-Abrage zu verwenden.

nicht Alternativ, dies ist die zu bervorzugende Variante!


-- 
Sebastian Mendel

www.sebastianmendel.de www.warzonez.de www.tekkno4u.de www.nofetish.com
www.sf.net/projects/phpdatetime        www.sf.net/projects/phptimesheet

php::bar PHP Wiki   -   Listenarchive