Hur pass mycket försvårar denna klassen att man kan ta en annans $_SESSION om man anropar ok() funktion flitigt för att kolla om besökaren är inloggad eller ej.
<?php
session_start();
class Authentication
{
public static function ok()
{
if(!isset($_SESSION['user']))
{
return false;
}
if($_SESSION['user']['privatedata']['remote_addr'] != $_SERVER['REMOTE_ADDR'])
{
return false;
}
if($_SESSION['user']['privatedata']['http_user_agent'] != $_SERVER['HTTP_USER_AGENT'])
{
return false;
}
return true;
}
public static function setValue($a,$b)
{
$_SESSION['user']['userdata'][$a] = $b;
}
public static function getValue($a)
{
if(!isset($_SESSION['user']['userdata'][$a]))
{
return false;
}
return $_SESSION['user']['userdata'][$a];
}
public static function Destroy()
{
$_SESSION = array();
if(isset($_COOKIE[session_name()]))
{
setcookie(session_name(), '', time()-42000);
}
session_destroy();
}
public static function Create($a)
{
$_SESSION['user']['privatedata']['remote_addr'] = $_SERVER['REMOTE_ADDR'];
$_SESSION['user']['privatedata']['http_user_agent'] = $_SERVER['HTTP_USER_AGENT'];
$_SESSION['user']['userdata'] = $a;
}
}
?>
Om t.ex besökare A snor besökare B session kaka så kommer han/hon plötsligt få alla rättigheter som besökare B hade om jag inte tänker fel. Hindrar ok() funktionen detta? Eller kanske php redan håller koll på detta så det är onödigt?
Ju, jag tror det med, men undrade mest om redan php håller koll på detta redan. Man tittar ju runt på massa sidor men jag har aldrig sett någon använda sig av detta så kanske php redan kollade sådant automatiskt?
När PHP startar en session så lagras session-id som en cookie i besökarens webbläsare.
Cookien fungerar alltså som en nyckel så att besökaren kommer åt sin egen session.
Men om någon annan skurk snappar upp session-id:t så kan man skapa en likadan cookie för att kidnappa sessionen.
Så det är väl rimligt att en besökare inte byter IP eller User_agent under sessionens livstid.
Såvitt jag vet kollar inte PHP detta själv utan man får göra en extra koll.
Ditt förslag kan nog funka men jag vet inte vad som är den bästa lösningen.
Okej, men då är det ju bra :) Kom att tänka på en sak, på skolor så finns det ofta massor av datorer, vissa av dem har säkert samma IP nummer och antagligen samma webbläsare, om någon kille eller tjej sniffar upp en session kaka som då sänds så kommer den personen gå förbi systemet. Kan man på något sätt separera dessa 2 från varandra i så fall. Skulle det dessutom höja säkerheten om jag kollade också om personen redan var inloggad och om den var det inte acceptera inloggningen, via att t.ex när man loggar in så sätts värdet true i en databas och sedan false när man loggar ut. Därmed skulle jag väl försäkra mig att enbart en kan vara inloggad samtidigt? Eller det kanske är overkill?
Om man kommer åt cookien så är man inloggad så det höjer inte säkerheten att kolla om folk redan är inloggade. Dock använder jag den metoden för licenskontroll, så att inte fler personer än kunden betalt för ska kunna använda systemet.
Ett större problem för dig är nog den mänskliga faktorn. Folk brukar glömma att logga ut, så sessionen ligger kvar till nästa person som kommer till datorn.
Tyvärr så får man väldigt lite information om en klient, dvs. besökaren.
Man har typ bara http-variabler som Remote_addr och User_agent att gå på.
Och denna info är dessutom inte tillförlitlig eftersom besökaren inte alltid skickar den.
T.ex. så blockerar Norton Internet Security ofta dessa uppgifter.
Så det är svårt, om inte omöjligt att skilja två datorer på samma lokala nätverk från varandra...
tydal
Okej, men finns det skydd mot den mänskliga faktorn då? Kan man hindra att det inte går att trycka bakåt när man har loggat ut och/eller när man går ifrån domänen och sedan tillbaka? På gmail så har jag för mig att det inte går att trycka bakåt när man har loggat ut, hur fixar man det?
Troxy
Okej, jag förstår.
jme
Det där med session_regenerate_id() verkade intressant nu när jag gjorde en enkel sökning. Det måste jag kolla in mer imorgon.
Tack för allt hittills allihopa :)
256 ms totalt · 4 externa anrop · v20260731065814-full.86ec41c2