webForumDet fria alternativet

Globala variabler..

3 svar · 200 visningar · startad av [miCkE]

[miCkE]Medlem sedan okt. 200133 inlägg
#1

Har frågor kring detta med säkerheten..
Läste PHPPortalens suveräna artikel om detta och använder nu:
if(!$HTTP_SESSION_VARS['username']) för att kolla om användare är inloggad.
Då jag registrerar sessionsvariabeln och ger den ett värde i en funktion, så undrar jag:
Hur gör jag den global? Är den det av default?
Hur är det säkerhetsmässigt med globala variabler? Kan någon obehörig komma åt dessa..?
Låt säga att jag i funktionen sätter: global $username;
Hur är detta rent säkerhetsmässigt?

------------------
Skit vare förr, fast jävligare vart det desto värre sen.
Men så här jävla sämre har det ta mig faan aldrig varit dåligt!

spangoMedlem sedan juni 20008 205 inlägg
#2

Hur är det säkerhetsmässigt med globala variabler? Kan någon obehörig komma åt dessa..?
Låt säga att jag i funktionen sätter: global $username;
Hur är detta rent säkerhetsmässigt?
Nej, globala variabler är bara åtkomliga i det script som de finns i. Däremot är de på alla andra tänkbara vis extremt dåliga.

------------------
Before you criticize someone, walk a mile in his shoes. That way, if he gets angry, he'll be a mile away - and barefoot.

SPiNMedlem sedan mars 20007 896 inlägg
#3

Tack för berömmet, det var jag som skrev den artikeln! :D

En sessionsvariabel är global by default, precis som du säger. Ur säkerhetssynpunkt är det ingen fara, för jag antar att du menar globala variabler i det aktuella dokumentet? Det är det som global används till, för man kan inte sätta globala variabler över flera dokument - utom med sessioner.

Vad menar du egentligen med global $username? Eftersom att en sessionvariabel är global, så kan du använda den utan problem i funktioner. Dock kan du inte sätta värden på den globala, associativa arrayen, utan du måste registrera en ny sessionvariabel, förslagsvis med samma namn, med det nya värdet.

Exempel:

<?php
session_start ();

if ( $HTTP_SESSION_VARS['username'] != "" ) {
&nbsp; &nbsp; ändraUsername ();
}
else {
&nbsp; &nbsp; echo "Du har ingen session, maaan!";
}

function ändraUsername () {
&nbsp; &nbsp; $username = "Nytt";
&nbsp; &nbsp; session_register ( "username" );
}
?>

Såg nu att du använde dig av:

if ( !$HTTP_SESSION_VARS['username'] )...

Det är inte alls säkert för fem öre, eftersom att ( Enligt php.net ) alla globala, associativa arrayer har värden i sig. Man måste alltså kolla så att platsen inte är tom. Dvs:

if ( $HTTP_SESSION_VARS['username'] != "" )...

En variabel för $HTTP_SESSION_VARS är alltid satt, därför funkar inte not-operatorn.

------------------
SPiN, bjorne.w@telia.com

-- Wise men talk because they have something to say; fools, because they have to say something. --

[miCkE]Medlem sedan okt. 200133 inlägg
#4

Tack för svaren..
Lärt mig nåt nytt har jag!
Jag fick det inte att funka utan att sätta global $username i funktionen..

Har en "kolla-användare-funktion" som initialt kollar om en sessionsvariabel existerar. Gör den det inte, så "reggar" jag och sätter den, om nu användaren finns.

Vid "hoppande" mellan adminsidorna så kollas bara om den skapade sessionsvariabeln existerar.
Det är denna sessionsvariabel jag inte fick att funka om jag utelämnade just: global $username

Har för övrigt aldrig direkt använt mig av sessionsvariabler.. en newbie alltså!

Får välan se över mitt "fulhack"..
Tjaba../Micke

------------------
Skit vare förr, fast jävligare vart det desto värre sen.
Men så här jävla sämre har det ta mig faan aldrig varit dåligt!

136 ms totalt · 3 externa anrop · v20260731065814-full.30151723
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
132 ms — hämta tråd, inlägg och bilagor (db)