Zinvol om "unset($GLOBALS[Wachtwoord])" te doen als extra beveiliging?
Ik vroeg me af, ondanks dat Register Globals uit staat op mijn server, komen bepaalde gegevens toch even in de globals. Als ik bijvoorbeeld op een publieke pagina ook een verbinding maak (en sluit) met de mysql database en ik op die pagina print_r($GLOBALS) bekijk, dan zie ik daarin o.a. het wachtwoord dat ik heb gebruikt voor mijn verbinding.
Is het zinvol om hier, direct na het sluiten van de verbinding bepaalde waardes in de Globals te verwijderen dmv de volgende code:
Hoe komt jouw wachtwoord daar dan in terecht? Lijkt mij niet logisch. Verder is $GLOBALS een array(), dus waar zijn de quotes?
Een wachtwoord opslaan in een sessie/global? Lijkt me niet de bedoeling...
Geen idee hoe het kan!? Wellicht kunnen jullie me helpen met dit euvel? Ik neem een pagina op met de verbindingsgegevens:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?php
// in de pagina logingegevens.php staan de logingegevens
require (" URI naar ... logingegevens.php");
$Verbinding = mysql_connect ($Host, $Gebruiker, $Wachtwoord);
// Controle van de verbinding met de database
if ($Verbinding = mysql_connect($Host, $Gebruiker, $Wachtwoord)) {
if (!(mysql_select_db($DBNaam))) {
// indien geen database geselecteerd
$foutmeldingen[] = "Er is geen database geselecteerd";
}
} else {
// indien geen database connectie
$foutmeldingen[] = "Er is geen verbinding met de database";
}
?>
// in de pagina logingegevens.php staan de logingegevens
require (" URI naar ... logingegevens.php");
$Verbinding = mysql_connect ($Host, $Gebruiker, $Wachtwoord);
// Controle van de verbinding met de database
if ($Verbinding = mysql_connect($Host, $Gebruiker, $Wachtwoord)) {
if (!(mysql_select_db($DBNaam))) {
// indien geen database geselecteerd
$foutmeldingen[] = "Er is geen database geselecteerd";
}
} else {
// indien geen database connectie
$foutmeldingen[] = "Er is geen verbinding met de database";
}
?>
Hierbij een voorbeeld van de pagina waarin het zich voor doet als ik geen "unset" toe pas:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<?php
// maak verbinding met de database
require ("URI naar ... /includes/verbinding.php");
// Ophalen overzicht
$Opdracht = "SELECT NIEUWS FROM TABEL";
$Resultaat = mysql_query ($Opdracht);
$Nieuws = mysql_result($Resultaat,0);
// Sluit de verbinding
mysql_close ($Verbinding);
// Verwijder Globals waarin o.a. login gegevens van de verbinding;
unset($GLOBALS['Wachtwoord']);
unset($GLOBALS['Gebruiker']);
unset($GLOBALS['DBNaam']);
unset($GLOBALS['Host']);
unset($GLOBALS['Verbinding']);
?>
// maak verbinding met de database
require ("URI naar ... /includes/verbinding.php");
// Ophalen overzicht
$Opdracht = "SELECT NIEUWS FROM TABEL";
$Resultaat = mysql_query ($Opdracht);
$Nieuws = mysql_result($Resultaat,0);
// Sluit de verbinding
mysql_close ($Verbinding);
// Verwijder Globals waarin o.a. login gegevens van de verbinding;
unset($GLOBALS['Wachtwoord']);
unset($GLOBALS['Gebruiker']);
unset($GLOBALS['DBNaam']);
unset($GLOBALS['Host']);
unset($GLOBALS['Verbinding']);
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Nieuws</title>
<link href="/style/default.css" rel="stylesheet" type="text/css" />
</head>
<body>
</body>
</html>
En in 'URI naar ... logingegevens.php' zet je het er waarschijnlijk zelf in.
Die variabelen staan daar in de $GLOBALS array aangezien ze als variabele in het script gedefinieerd worden (via de require). Buiten dit script zijn die variabelen helemaal niet beschikbaar dus is het ook onzinnig om die variabelen te gaan unsetten...
Toch vraag ik me af of het dan mogelijk is om $GLOBALS uit te lezen? Inderdaad ze bestaan alleen op deze pagina, sterker, op elke pagina waarin de verbinding wordt opgenomen als include. Daarnaast als je sql opdrachten maakt als $sql="de opdracht"; staan die ook in de $GLOBALS van de desbetreffende pagina. Gaat me iets te ver om die te unsetten.
Lang verhaal kort... de vraag is dus, is het zinvol?
Dus, net het is niet zinvol...
Code (php)
1
2
3
4
5
2
3
4
5
<?php
$Opdracht = "UPDATE ".mysql_real_escape_string($tabel)."
SET NIEUWS = '".mysql_real_escape_string($GEGEVENS['NIEUWS'])."'
WHERE ID.... enzovoort
?>
$Opdracht = "UPDATE ".mysql_real_escape_string($tabel)."
SET NIEUWS = '".mysql_real_escape_string($GEGEVENS['NIEUWS'])."'
WHERE ID.... enzovoort
?>
Kunnen dan niet alsnog de GLOBALS worden afgedrukt, met andere woorden, wordt php code tegengehouden door "mysql_real_escape_string" in de query op te nemen?
Kortom, ik zou me geen zorgen maken en vooral jezelf geen extra werk op de hals halen door alle globals telkens te unsetten. Dat kan bovendien nog voor leuke bugs in je systeem zorgen als je op een gegeven moment een variabele nodig hebt die niet meer blijkt te bestaan :-)
thx Blanche, ik ben gerustgesteld :-) en heb nog genoeg te doen! (en te leren)