Gilbert Skrevet 14. februar 2004 Del Skrevet 14. februar 2004 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
sven-o Skrevet 14. februar 2004 Del Skrevet 14. februar 2004 (endret) Ip: $_SERVER['REMOTE_ADDR'] Browser: $_SERVER['HTTP_USER_AGENT'] Edit: Regner med at du klarer å fylle ut dette selv. Endret 14. februar 2004 av sven-o Lenke til kommentar
Gilbert Skrevet 14. februar 2004 Forfatter Del Skrevet 14. februar 2004 skal fixe den biffen ja hva med sikkerheten ellers i det jeg har gjengitt ovenfor? har ikke tenkt til å renskrive siten flere ganger... så greit om det blir bra denne gang. Lenke til kommentar
sven-o Skrevet 14. februar 2004 Del Skrevet 14. februar 2004 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
???????? Skrevet 14. februar 2004 Del Skrevet 14. februar 2004 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
sven-o Skrevet 14. februar 2004 Del Skrevet 14. februar 2004 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? *Sukk, det er lørdag, og jeg fikk ikke dra ut av dama(les:valentines day)* *henter en pils fra kjøleskapet* Lenke til kommentar
BlueEAGLE Skrevet 16. februar 2004 Del Skrevet 16. februar 2004 Det vil ødelegge legitim bruk av browserid. For de som bruker Opera så er det ofte nødvendig å endre identiteten til leseren for å kunne lese noen sider. Hvis man logger på en slik side og dermed endrer identiteten til nettleseren så er siden din ødelagt. Bare en tanke. Lenke til kommentar
???????? Skrevet 16. februar 2004 Del Skrevet 16. februar 2004 Det er av grunner som det at sessions har den svakheten de har. Noen får også forskjellige ip-adresser mens de surfer. Lenke til kommentar
Gilbert Skrevet 16. februar 2004 Forfatter Del Skrevet 16. februar 2004 så IP er kanskje ikke helt greia da om jeg forstår rett. Tror kanskje http referer , browser og brukernavn/passord holder da Lenke til kommentar
Torbjørn Skrevet 16. februar 2004 Del Skrevet 16. februar 2004 jeg villa brukt ip - modem som vil være verste problemet her, skifter ikke så ofte. i verste fall får man logge inn på nytt en gang i ny og ne. Lenke til kommentar
???????? Skrevet 16. februar 2004 Del Skrevet 16. februar 2004 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
Gilbert Skrevet 22. februar 2004 Forfatter Del Skrevet 22. februar 2004 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
Gilbert Skrevet 23. februar 2004 Forfatter Del Skrevet 23. februar 2004 weeee 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
ilpostino Skrevet 23. februar 2004 Del Skrevet 23. februar 2004 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
Anbefalte innlegg
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 kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå