Verwendung von Register Globals

Ein Feature von PHP zur Erhöhung der Sicherheit ist die Konfiguration von PHP mit register_globals = off . Mit Deaktivierung der Möglichkeit , irgendeine vom Benutzer übertragenen Variable in den PHP Code zu injizieren , können Sie die Anzahl " vergifteter " Variablen reduzieren , welche ein potentieller Angreifer zufügen könnte . Dieser benötigt mehr Zeit , um sich Übermittlungen auszudenken , und Ihre internen Variablen sind effektiv von den übergebenen Benutzervariablen isoliert .

Während dies den benötigten Aufwand mit PHP zu arbeiten leicht erhöht ist dargelegt , dass die Vorteile gegenüber dem Aufwand klar überwiegen .

Beispiel 5-14 . Mit register_globals=on arbeiten

 
?php

 
if

 
(

 
$username

 
)

 
{

 
/

 
/

 
kann

 
vom

 
User

 
mit

 
get

 
/

 
post

 
/

 
cookies

 
übermittelt

 
werden

 
$good_login

 
=

 
1

 
;

 
}

 
if

 
($good_login

 
==

 
1

 
)

 
{

 
/

 
/

 
kann

 
vom

 
User

 
mit

 
get

 
/

 
post

 
/

 
cookies

 
übermittelt

 
werden

 
fpassthru

 
("

 
/

 
highly

 
/

 
sensitive

 
/

 
data

 
/

 
index.html")

 
;

 
}

 
?



Beispiel 5-15 . Mit register_globals = off arbeiten

 
?php

 
if(

 
$_COOKIE['username'])

 
{

 
/

 
/

 
kann

 
nur

 
von

 
einem

 
Cookie

 
kommen

 
$good_login

 
=

 
1

 
;

 
fpassthru

 
("

 
/

 
highly

 
/

 
sensitive

 
/

 
data

 
/

 
index.html")

 
;

 
}

 
?



Dies weise genutzt ist es auch möglich, präventive Messungen durchzuführen, um bei versuchten Vorstößen zu warnen. Wenn Sie im Voraus wissen, woher eine Variable kommen soll, können Sie prüfen, ob die übermittelten Daten nicht einen unpassenden Weg genommen haben. Obwohl dies nicht garantiert, dass Daten nicht nur ausgedacht sind, erfordert es von einem Angreifer, auch den richtigen Weg zu finden.

Beispiel 5-16 . Entdecken einfacher Manipulationen von Variablen

 
?php

 
if

 
(

 
$_COOKIE['username'

 
]

 
!$_POST['username'

 
]

 
!$_GET['username'

 
]

 
)

 
{

 
/

 
/

 
Durchführen

 
anderer

 
Checks

 
,

 
ob

 
der

 
Benutzername

 
gültig

 
ist..

 
.

 
$good_login

 
=

 
1

 
;

 
fpassthru

 
("

 
/

 
highly

 
/

 
sensitive

 
/

 
data

 
/

 
index.html")

 
;

 
}

 
else

 
{

 
mail("admin@example.com"

 
,

 
"Possible

 
breakin

 
attempt"

 
,

 
$_SERVER['REMOTE_ADDR'])

 
;

 
echo

 
"Security

 
violation

 
,

 
admin

 
has

 
been

 
alerted

 
."

 
;

 
exit

 
;

 
}

 
?



Natürlich bedeutet ein einfaches Deaktivieren von register_globals nicht, dass Ihr Code nun automatisch sicher ist. Jeder Teil mit Daten sollte auch auf andere Arten geprüft werden.