Gå til innhold

Lage session på dynamisk vis


Anbefalte innlegg

Hei, holder på med et innloggingsscript, og for å kunne skjekke om en autorisert person er innlogget vil jeg benytte meg av sessions. Problemet er når sessionen skal opprettes.

 

Slik er strukturen i grove trekk:

 

*Når en person logger inn, blir brukernavn og passord skjekket opp mot en database*

 

*VIS BRUKER OG PASSORD ER RIKTIG:

 

Skal det lages en session av brukerens navn, F.eks Ola Norman, som står i en variabel.*

 

 

Her oppstår problemet. Har prøvd å opprette session på følgende måter:

 

$_SESSION['$brukernavn'] = TRUE; // Fører til at sessionens navn blir $brukernavn.

 

$_SESSION[$brukernavn] = TRUE; // Ser ikke ut til at noen session blir laget her.

 

Noen som kan hjelpe?

Lenke til kommentar
Videoannonse
Annonse

Først og fremst er det overhode ikke en sikker metode å bare sette noe til true. Her vil du være utsatt for session hijack. For det andre, hvorfor gjør du det så vrient? Hvis du vil ha det så usikkert, hvorfor ikke bare $_SESSION['brukernavn'] = brukernavn?

 

Derimot, hvis du faktisk vil ha en sikker greie rundt det hele så gjør følgende:

  • Ved vellykket innlogging, lagre brukerid/brukernavn, ip og browser i session
  • For hver nye side, sjekk at ip og browser stemmer.

Lenke til kommentar

PHP

<?php session_start();

 

$var1 "Ola";

$var2 "Ola";

 

if ($var1 == $var2)

{

$_SESSION['$var1'] = TRUE;

echo "<br>done";

};

 

?>

 

Med denne koden vil det fungere.

Jeg er enig med Ernie, du burde ha bedre sikkerhet.

Endret av Hjelpphp
Lenke til kommentar
Først og fremst er det overhode ikke en sikker metode å bare sette noe til true. Her vil du være utsatt for session hijack. For det andre, hvorfor gjør du det så vrient? Hvis du vil ha det så usikkert, hvorfor ikke bare $_SESSION['brukernavn'] = brukernavn?

 

Derimot, hvis du faktisk vil ha en sikker greie rundt det hele så gjør følgende:


  •  
  • Ved vellykket innlogging, lagre brukerid/brukernavn, ip og browser i session
     
  • For hver nye side, sjekk at ip og browser stemmer.
     

9356126[/snapback]

 

Viste ikke det var mulig å gjøre det på den måten. Hvordan kan jeg lagre flere verdier i en session, og hvordan hente ut en bestemt verdi fra den? F.eks ip og bruker?

 

Takk for svar!

Lenke til kommentar

$_SESSION er en array på lik linje med alle andre array-er man oppretter selv. Derfor kan man gjøre slik:

PHP
<?php

$_SESSION['ip'] = $_SERVER['REMOTE_ADDR'];

$_SESSION['browser'] = $_SERVER['HTTP_USER_AGENT'];

?>

 

Ved sammenligning bør man bruke strcmp(...) eller tilsvarende.

Endret av Ernie
Lenke til kommentar
Hvis alt skal vaere sa sikkert, sa er det vel riktig a ta med at hackere kan endre REMOTE_ADDR mener jeg.

9358448[/snapback]

Ja, men det finnes ikke så mye annet vi kan bruke som er unikt ;-) Skal man ha det mer sikkert så er ikke HTTP(S) veien å gå siden den er stateless.

 

Edit: Etter nærmere ettertanke fungerer jo HTTP(S) like greit som noe annet. Det som dog er poenget er at man må ha noe aktivt i begge ender, og det har man ikke mulighet til sånn helt uten videre med HTTP(S).

Endret av Ernie
Lenke til kommentar

Ja, enkelte ISPer, deriblant AOL, gir brukeren ny IP for opptil hver req. Det er en stor irritasjon, men ved å kjøre en "løs" sjekk (sjekke det de tilhører samme "klynge" med IPer) mot IP kan det fortsatt brukes, dog med noe redusert sikkerhet.

Lenke til kommentar
Session hijacking er mulig, og man bør lage litt kode for å sikre seg mot dette, eller i det minste gjøre det vanskeligere.

9356537[/snapback]

 

Enkleste måten å bekjempe session hijacking er å bruke php sin egen fuksjon for det:

 

session_regererate_id();

 

Denne fuksjonen bytter session id'en for hver eneste request. Det gjør at det er mye vanskeligere å misbruke session id'en, fordi den kun eksisterer i en meget begrenset tidsrom.

 

Se: PHP manualen

Endret av emilhauk
Lenke til kommentar
Session hijacking er mulig, og man bør lage litt kode for å sikre seg mot dette, eller i det minste gjøre det vanskeligere.

9356537[/snapback]

 

Enkleste måten å bekjempe session hijacking er å bruke php sin egen fuksjon for det:

 

session_regererate_id();

 

Denne fuksjonen bytter session id'en for hver eneste request. Det gjør at det er mye vanskeligere å misbruke session id'en, fordi den kun eksisterer i en meget begrenset tidsrom.

 

Se: PHP manualen

9362029[/snapback]

Dessverre er PHP elendig akkurat her. Jeg kan ikke få uttrykt hvor hårreisende det er, men en regen vil ikke fjerne den gamle session for alle versjoner av PHP før 5.1.0. Med andre ord, for alle versjoner før 5.1.0 vil du fortsatt være utsatt for session hijack selv om du aktivt bruker session_regenerate_id.

Endret av Ernie
Lenke til kommentar

Fant dette scriptet for en stund tilbake

PHP
<?php

if(version_compare('5.1.0'phpversion(), '>'))

session_regenerate_id(); 

else 

unlink(ini_get('session.save_path').'/sess_'.session_id()); 

session_regenerate_id(); 

}

?>

 

Tror det skal hjelpe på problemet, men hvor mye vet jeg ikke.

Lenke til kommentar
Dessverre er PHP elendig akkurat her. Jeg kan ikke få uttrykt hvor hårreisende det er, men en regen vil ikke fjerne den gamle session for alle versjoner av PHP før 5.1.0. Med andre ord, for alle versjoner før 5.1.0 vil du fortsatt være utsatt for session hijack selv om du aktivt bruker session_regenerate_id.

9362128[/snapback]

 

Jeg trodde session_regenerate_id(true) skal gjøre dette.

Lenke til kommentar

Ah.. det hadde jeg ikke fått med meg, hehe.

 

Det jo å anbefale en oppgradering for de som sitter med php4 fremdeles. ref: PHP 4 end of life announcement. Fant ingen link direkte til denne nyheten, men inntil videre ligger på forsiden i allefall.

 

Uansett så burde jo kodefliken som crowly kom med fungere:

 

PHP
<?php

if(version_compare('5.1.0'phpversion(), '>'))

session_regenerate_id(); 

else 

unlink(ini_get('session.save_path').'/sess_'.session_id()); 

session_regenerate_id(); 

}

?>

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...