Zinvol om "unset($GLOBALS[Wachtwoord])" te doen als extra beveiliging?

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Marco V

Marco V

04/11/2010 14:32:04
Quote Anchor link
Hallo allen,

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:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
unset($GLOBALS[Wachtwoord]);
?>
 
PHP hulp

PHP hulp

17/01/2021 00:08:29
 
- SanThe -

- SanThe -

04/11/2010 15:07:51
Quote Anchor link
Hoe komt jouw wachtwoord daar dan in terecht? Lijkt mij niet logisch. Verder is $GLOBALS een array(), dus waar zijn de quotes?
 
Chris -

Chris -

04/11/2010 15:29:59
Quote Anchor link
Een wachtwoord opslaan in een sessie/global? Lijkt me niet de bedoeling...
 
Marco V

Marco V

04/11/2010 16:19:05
Quote Anchor link
Het lijkt me zeker niet de bedoeling, maar ik constateer dat het wel het geval is.
Geen idee hoe het kan!? Wellicht kunnen jullie me helpen met dit euvel? Ik neem een pagina op met de verbindingsgegevens:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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";
        }

?>


Hierbij een voorbeeld van de pagina waarin het zich voor doet als ik geen "unset" toe pas:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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']);

?>


<!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>
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
print $Nieuws;
?>


</body>
</html>
 
- SanThe -

- SanThe -

04/11/2010 16:30:17
Quote Anchor link
En in 'URI naar ... logingegevens.php' zet je het er waarschijnlijk zelf in.
 
Joren de Wit

Joren de Wit

04/11/2010 16:32:40
Quote Anchor link
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...
 
Marco V

Marco V

04/11/2010 16:51:54
Quote Anchor link
In de URI naar ... logingegevens.php staat idd bijvoorbeeld $Wachtwoord = "blabla";

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?
 
Joren de Wit

Joren de Wit

04/11/2010 17:10:05
Quote Anchor link
Wie zou die variabelen op welk moment moeten uitlezen? Ze worden nergens op (een gedeeld gedeelte van) de server opgeslagen. Ze zijn enkel tijdens uitvoer van het script in de $GLOBALS array te vinden. De enige die erbij kan, is het script dat op dat moment uitgevoerd wordt.

Dus, net het is niet zinvol...
 
Marco V

Marco V

04/11/2010 18:33:47
Quote Anchor link
En als iemand iets post dat ik (zonder te weten) weergeef... in het voorbeeld heb ik een nieuwspagina waarvan de tekst opgehaald wordt uit de database. Is het waterdicht als ik de tekst naar de database schrijf met de volgende query:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
<?php
$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?
 
Joren de Wit

Joren de Wit

04/11/2010 20:27:21
Quote Anchor link
In jouw voorbeeld zal de inhoud van die variabele naar de database geschreven worden. En mocht je dan toch op een of andere manier PHP code in je database hebben staan, dan altijd zul je nog eval() nodig hebben om deze ook daadwerkelijk uit te voeren. Bovendien voorkom je dit niet door de globals te unsetten...

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 :-)
 
Marco V

Marco V

04/11/2010 20:57:57
Quote Anchor link
thx Blanche, ik ben gerustgesteld :-) en heb nog genoeg te doen! (en te leren)
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.