Gå til innhold

Session sikkerhet


Anbefalte innlegg

En måte du kan øke sikkerheten betraktlig er å legge til noen ekstra variabler i sessionen som du også sjekker samtidig som du sjekker brukernavnet og passordet. Du legger f.eks. til ip og browsertype. Stemmer brukernavnet, passordet, ip og browsertype så er det gangske stor sjanse for at brukeren virkelig er brukeren. Stemmer ikke ip eller beowsertype så sletter du sessionen.

 

Det jeg har funnet frem til, har jeg skrevet nedenfor ; trenger litt assistanse til de tomme feltene:

 

 

Øverst på hver beskyttet side

if(!session_is_registered('session_brukernavn') || !session_is_registered('session_passord) || $_session['session_ip'] == "??" || $_session['session_browser] == "??")

{

echo "Error user identification";

exit();

}

 

 

Registrere sessions

$_SESSION['session_brukernavn'] = mysql_result($sql,0,"brukernavn");

$_SESSION['session_passord'] = mysql_result($sql,0,"passord");

$_SESSION['session_ip'] = ??

$_SESSION['session_browser'] = ??

 

 

Med andre ord, er vel egentlig snakk om å finne browser og ip, men tar med hele koden tilfelle det finnes feil jeg ikke har oppdaget... ;)

Lenke til kommentar
Videoannonse
Annonse

Tja, vet ikke jeg. Ettersom du siterte ??????? i det første innlegget regner jeg med at du fikk et par gode tips der.

En liten ekstra ting er vel kanskje å kryptere dataen du lagrer i session. Koster lite, men om det gjør så mye nytte vet jeg ikke. Blir iallefall vanskeligere å tukle med, da "tukleren" umulig kan få noe nyttig ut av det.

Lenke til kommentar
En liten ekstra ting er vel kanskje å kryptere dataen du lagrer i session.

Absolutt! Du trenger kanskje ikke å kryptere alle variablene, men passord brude i alle tilfeller krypteres.

 

Et par andre små ting du kan gjøre for å øke sikkerheten er å redusere tiden en session skal vare(session_cache_expire()) og forsøke, i den grad det er mulig, å sjekke 'HTTP_REFERER' på skjemaet som sendes med logginn informasjon. (eventuelt skrive en egen form for HTTP_REFERER der du lagrer forrige åpnede side i en session eller sender den med $_REQUEST).

Lenke til kommentar
Absolutt! Du trenger kanskje ikke å kryptere alle variablene, men passord brude i alle tilfeller krypteres.

Jepp. Tok det el egentlig for gitt at dette var kryptert i databasen.

Tenkte mer på ip og/eller brukernavn.

 

 

Har jeg forresten nevnt hvor glad jeg er i å kryptere stæsj? :lol:

*Sukk, det er lørdag, og jeg fikk ikke dra ut av dama(les:valentines day)* :cry:

 

 

 

 

 

 

*henter en pils fra kjøleskapet* :love:

Lenke til kommentar

Ip er ganske stabil, men de i større nettverk og surfer gjennom routere kan vel få ny adresse mens de er inne på en side.

 

HTTP_REFFERER er ikke så veldig smart å stole på, da ikke alle browsere klarer å sende den.

 

Det hjelper ofte å sette gyldigheten på sessionen så kort tid som mulig, f.eks. har de være innaktive i mer enn 5 min må de logge inn på nytt.

Lenke til kommentar

Er dette en sikker måte å gjøre det på? Får string feilmelding ved setting av variablene btw.

 

<?php
session_start();
if ($_SERVER['HTTP_REFERER'] == "-URL-") {

$brukernavn = $_POST['brukernavn'];
$passord = $_POST['passord'];

if (empty($brukernavn) || empty($passord) || !isset($brukernavn) || !isset($passord)) {
 if(empty($brukernavn) || !isset($brukernavn)) {
 	$error_brukernavn = 1;
 }
 if(empty($passord) || !isset($passord)) {
 	$error_passord = 1;
 }
} else {
 $md5passord = md5($passord);
 mysql_connect("", "", ""); 
 mysql_select_db(,$dbc); 

 $trans_sql = mysql_query("SELECT * FROM brukere WHERE brukernavn LIKE '".$brukernavn."' AND passord LIKE '".$md5passord.'"");
 $number = mysql_num_rows($trans_q);
 
 if ($number == "0") {
 	$error_login = 1;
 } else {
 	$_SESSION['session_sypher'] = mysql_result($trans_sql,0,"sypher");
 	$_SESSION['session_brukernavn'] = mysql_result($trans_sql,0,"brukernavn");
 	$_SESSION['session_browser'] = $_SERVER['HTTP_USER_AGENT'];
 	$_SESSION['session_ip'] = $_SERVER['REMOTE_ADDR'];
 	Header ("Location: -URL-");
 	exit();
 }
}
}
echo "masse feil";

Lenke til kommentar

weeee :D fant feilen etter MYE feilsøking... se nøye på følgende linje:

 

$trans_sql = mysql_query("SELECT * FROM brukere WHERE brukernavn LIKE '".$brukernavn."' AND passord LIKE '".$md5passord.'"");

 

siste delen...

 

'".$md5passord.'"");

 

står det " ' " eller står det ' " " ? hehe...det er vanskelig å se, men det står ' " " , og da får man jo som kjent et par feilmeldinger ja...

Lenke til kommentar
Et par andre små ting du kan gjøre for å øke sikkerheten er å redusere tiden en session skal vare (session_cache_expire())

her er hvordan jeg har prøvd å øke sikkerheten når jeg bruker sessions. (dette ved siden av å putte ip-adressen i en session som beskrevet i denne tråden). Vanligvis 'utgår' en session etter 180 minutter (ifølge php.net) men her settes den til 10 minutter.

 

//Setter cache limiter til 'private'
session_cache_limiter('private');
$cache_limiter = session_cache_limiter();

//Setter expire på sessions til 10 minutter
session_cache_expire(10);
$cache_expire = session_cache_expire();

//Starter Sessions
session_start();

 

videre bruker jeg denne for å sjekke ip-adressen til de besøkende mot den som ligger 'lagret' i sessions (dette sammenligner sessions-ip med ip'n som en funksjon på siden henter. den funksjonen som henter ip er under). Hvis ip-adressen er feil åpnes et login-vindu hvor brukeren må logge seg på. Jeg bruker sessions her for å sende 'feilmelding' som står øverst på login-siden som inkluderes i denne siden:

 

 
if (!($_SESSION['data']['ip'] == getIP())) {
$_SESSION['feilmelding'] = "Du skal ikke være her uten å logge deg inn.";
@include("login.php");
exit();
}

 

Her er funksjonen som henter ip-adressen:

function getIP() {
$ip;
if (getenv("HTTP_CLIENT_IP")) $ip = getenv("HTTP_CLIENT_IP");
else if(getenv("HTTP_X_FORWARDED_FOR")) $ip = getenv("HTTP_X_FORWARDED_FOR");
else if(getenv("REMOTE_ADDR")) $ip = getenv("REMOTE_ADDR");
else $ip = "UNKNOWN";

return $ip;
}

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...