Säkerhetsrisker finns om besökarna vet namnet på dina variabler, utan att du koller dem. T.ex. följande två sidor:
<?php
session_start ();
$username = "SPiN";
session_register ( "username" );
header ( "Location: sida2.php" );
<?php
session_start ();
if ( $username != "" ) {
echo "Välkommen att läsa den här superduper-hemliga informationen, eftersom att du är inloggad!";
}
else {
exit;
}
?>
Vad händer nu om någon går in på sida2.php med följande adress?
http://server.se/sida2.php?username=MrHacker
Självklart får den personen tillgång till den superduper-hemliga informationen, eftersom att variabeln blir satt. Scriptet kollar ju inte om det är från en session eller från adressfältet. Har du däremot register_globals satt till off, så måste du kontrollera variabeln $username så här:
<?php
session_start ();
if ( $_SESSION[ 'username' ] != "" ) {
echo "Information";
}
elseif ( $_GET[ 'usernameä ] != "" ) {
echo "Försök inte lura mig, MrHacker!";
}
else {
exit;
}
?>
Det handlar inte så mycket om att ha register_globals satt till on eller off, utan mer hur man programmererar. Men sätter man register_globals till off så är det ju ingen risk att man gör "fel".