muffe Skrevet 18. april 2004 Del Skrevet 18. april 2004 Jeg har en side som bruker sessions til å styre innlogging. Men jeg er redd for sikkerheten. Hvordan sikrer jeg sessionen min best mulig, slik at det blir vanskeligst mulig å hacke seg inn? Tenker da på at det sikkert ikke er særlig vanskelig å lage "falske" sessions som vil lure siden min til å tro at brukernavn og passord er godkjent. På forhånd takk for hjelpen. Lenke til kommentar
???????? Skrevet 18. april 2004 Del Skrevet 18. april 2004 Dette er diskutert ganske mye i dette forumet, så du burde søke frem noen gamle tråder. Det er viktig at du ikke bygger en session på $_SESSION['LoggetInn'] = "ok". Lagre brukernavn og kryptert passord som du sjekker på hver side. Annet enn det så finnes det en del svakheter i sessions - det er et ganske stort tema og det finnes en del måter å hacke en session på, men i en artikkel fra php-mag.net i des 2003 eller jan 2004 var den en bra artikkel om session. Ta en kikk på den. Utgangspunktet til den var det den la til ip adresse og browser type i sessionen og sjekket at de også stemte med brukeren. Da blir det plutselig mye vanskligere å ta over en session. Et annet godt tips er å sette tiden på sessionene så kort som mulig. Har du mulighet til å sette opp SSL vil det også være en fordel. Som du sikkert skjønner så finnes det utrolig mange muligheter for å sikre sessions, så det er litt avhengig av hvor sikker siden må være. Er det en stor side med flere tusen hist hver dag eller er den bare noen hundre? Sessions er ikke så dårlig, det skal litt til for å hacke en session som ikke er sikker også. Lenke til kommentar
The Red Devil Skrevet 18. april 2004 Del Skrevet 18. april 2004 (endret) For å ta det kort, slik som ???????? sa, vist du kan legge session behandlingen over til ein database (vist du kjører på ein delt server er dette ein veldeg bra ting å gjør), legge inn ekstra informasjon som blir lagret i sessionene. Men eg vil være uenig i ein ting som blei sagt i forrige post, ikkje legg inn ipadressen. Det er ikkje ein veldeg stor case men brukere som bruker feks aol kan få forandre ipadressen mens dei er inne på siden og dermed blir deires session "terminated". Ein annen ide isteden for å bruke ip er å ta annen informasjon du får fra klienten og blande det sammen med ein forhand satt "salt" og kryptere alt isammen med md5, for deretter å sjekke om informasjonen stemmer neste gang du kontrollerer sessionen. Endret 18. april 2004 av The Red Devil Lenke til kommentar
???????? Skrevet 18. april 2004 Del Skrevet 18. april 2004 Det med ip adresse kan jeg verken si meg enig eller uenig med, det kommer rett fra artikkelen (om jeg husker rett ) Siden ipadressen er så bra å bruke med tanke på at det er vansklig for noen andre å utgi seg for en annen synes jeg "kanskje" at den er bra å bruke. Hvis brukeren skulle få ny ipadresse akuratt når de er logget inn så er det bare å logge inn på nytt. Du må nesten ta stilling til det selv. Lenke til kommentar
The Red Devil Skrevet 19. april 2004 Del Skrevet 19. april 2004 (endret) Eg klarte å finne artikkelen eg leste det i, veit ikkje om dette er den samme som var i magasinet (eg abbonerer ikkje på det) men den er iallefall fra php-mag sin internettside. Of particular note, in this example request, is that there is nothing within it that can be used to uniquely identify the client. Some developers resort to information gathered from TCP/IP (such as the IP address) for unique identification, but this approach has many problems. Most notably, a single user can potentially use a different IP address for each request (as is the case with AOL users), and multiple users can potentially use the same IP address (as is the case in many computer labs using an HTTP proxy). These situations can cause a single user to appear to be many, or many users to appear to be one. For any reliable and secure method of providing state, only information obtained from HTTP can be used. http://www.php-mag.net/itr/online_artikel/...nodeid,114.html Endret 19. april 2004 av The Red Devil Lenke til kommentar
???????? Skrevet 19. april 2004 Del Skrevet 19. april 2004 Skal fortsatt ikke si at IP adresse er det beste. Poengene i den artikkelen er ikke alltid like aktuelt. En norsk side har ikke mange ALO brukere som må logge seg inn og det at flere personer kan ha samme ipadresse er ikke noe problem. Mange som bruker en router har det. Sessionene sendes i headeren fra browseren til serveren. Så hvis de ikke logger seg inn blir det ikke opprettet en session. Lenke til kommentar
Ueland Skrevet 19. april 2004 Del Skrevet 19. april 2004 selv bruker jeg følgende måte i bla forumet jeg mekker på: -sessions lages som cookie -sessions legge si en tabell sammen med ip og nettleser i sessions tabellen legger jeg og et siste beveglse felt som idet sjekkes opp imot, hvis sessionen ikke har blitt brukt i løpet av x minutter ignoeres den. Lenke til kommentar
The Red Devil Skrevet 20. april 2004 Del Skrevet 20. april 2004 Eg sitter og funderer på ein ting, kansje nokon som veit det ? Vist du har eit par pcer koblet til internet via ein ruter (ein tilgjengelig ip), og du all logger inn på ei side som blant annet bruker "ip" for session registrering. Vil dei bli "terminated" etter kvart som nokon andre logger på ? Eller vist to av dei bruker samme modell browser/os etc vil dei bli logget på den samme sessionen ? (altså ein slags session hijacking) Lenke til kommentar
Pangaea Skrevet 20. april 2004 Del Skrevet 20. april 2004 Det er viktig at du ikke bygger en session på $_SESSION['LoggetInn'] = "ok". Lagre brukernavn og kryptert passord som du sjekker på hver side. Betyr det at en session som den under vil være lett å hacke seg inn i? index.php <?php session_start(); //checks if session_name is set if ($_SESSION['login'] != "true") { header("Location: login.php"); $_SESSION['error'] = "An error occured."; exit; } ?> <html> <head> <title>Authentication successful</title> </head> <body> This is the allmighty secret section of this magnificent site! </body> </html> validate.php <?php session_start(); $user = 'pangaea'; $pass = 'pangaea'; /* Checks if the input submitted in the form is the same as the username and password in this file */ if (($_POST['username'] == $user) && ($_POST['password'] == $pass)) { //if correct, set session = "true"; $_SESSION['login'] = "true"; //and redirect to index.php header("Location: index.php"); exit; } else { /*if information in the form is different from the info in this file, php prints an error message and redircts the user to login.php*/ $_SESSION['error'] = "Sorry, wrong username and/or pasword."; header("Location: login.php"); } ?> login.php <?php session_start(); ?> //HTML kode... <?php echo $_SESSION['error']; session_unset(); session_destroy(); ?> Hvordan kan man gjøre denne koden mer sikker i så fall (bortsett fra md5 som sikkert er lett å implementere) ?? Lenke til kommentar
???????? Skrevet 20. april 2004 Del Skrevet 20. april 2004 Sessions er et stort tema som er diskutert i mange bøker og artikkler, så det er litt mye å forklare i et forum Problemet er dersom man er på et delt webhotell, da er det mulig å at en annen oppretter en session for å "bruke" den på siden din. Bruker du da f.eks. $_SESSION['OK'] = "true" kan en annen "bare" sette den til true i sessionen. Bruker du der i mot passord og brukernavn må de vite brukernavnet og passordet. Lenke til kommentar
Pangaea Skrevet 20. april 2004 Del Skrevet 20. april 2004 Okay, da forstår jeg litt bedre Ser ikke helt hvordan de kan gjøre det, men så er ikke jeg akkurat no über-hacker heller da... Nå hentet jeg koden fra en tutorial fra en eller an hw brukers sider, så var nok ment som en introduksjon til sessions, med mindre fokus på sikkerhet og kobling til database. Tror jeg vet hvordan det bør gjøres. Vertfall så det blir sikkert nok for min bruk. Lenke til kommentar
???????? Skrevet 20. april 2004 Del Skrevet 20. april 2004 (endret) Ikke missforstå, jeg svarer gjerne på spørsmål om sessions - bare du ikke ber meg forklare alt Tenk deg når du satt opp sessions, da definerte du en mappe der sessionene plasseres. Problemet er hvis alle brukerenes sessions på et webhotell havner i samme mappe. Endret 20. april 2004 av ???????? Lenke til kommentar
Ueland Skrevet 20. april 2004 Del Skrevet 20. april 2004 en session er og forblir unik, kan ikke forveksles på serveren med mindre det er helllt sykt med besøkende (hvis jeg ikke bommer helt): Lenke til kommentar
eXZire Skrevet 20. april 2004 Del Skrevet 20. april 2004 Bruker du da f.eks. $_SESSION['OK'] = "true" kan en annen "bare" sette den til true i sessionen. Bruker du der i mot passord og brukernavn må de vite brukernavnet og passordet. How though? Om hosten og siden din har god sikkerhet, skal ikke det være særlig lett? Lenke til kommentar
Pangaea Skrevet 20. april 2004 Del Skrevet 20. april 2004 Vil det være en grei måte å lage en array av $_SESSION['login'] med fx brukernavn og passord. //sjekk mot database osv if (($_POST['username'] == $user) && ($_POST['password'] == $pass)) { $_SESSION['login'] = array(); $_SESSION['login'][] = $user; $_SESSION['login'][] = $pass; header("Location: index.php"); exit; } else { /*if information in the form is different from the info in this file, php prints an error message and redircts the user to login.php*/ $_SESSION['error'] = "Sorry, wrong username and/or pasword."; header("Location: login.php"); } ?> Lenke til kommentar
eXZire Skrevet 20. april 2004 Del Skrevet 20. april 2004 w00t? Kan en session være en array? Ante jeg ikke Lenke til kommentar
???????? Skrevet 20. april 2004 Del Skrevet 20. april 2004 $_SESSION kan ikke bare være en array, men det er en array. Lenke til kommentar
Ueland Skrevet 20. april 2004 Del Skrevet 20. april 2004 alle globale variabler som $_SESSION $_GET $_POST $_SERVer osv er arrays Lenke til kommentar
eXZire Skrevet 20. april 2004 Del Skrevet 20. april 2004 alle globale variabler som $_SESSION $_GET $_POST $_SERVer osv er arrays Ja, det vet jeg, trodde bare at man ikke kunne lage $_SESSION['brukernavn'][0] (f.eks) .. Lenke til kommentar
???????? Skrevet 20. april 2004 Del Skrevet 20. april 2004 en session er og forblir unik, kan ikke forveksles på serveren med mindre det er helllt sykt med besøkende (hvis jeg ikke bommer helt): Ja, en session er unik til noen tar over den ved å få id'en. Det står til og med i PHP manualen at SSL er en god løsning for å beskytte sessionen. Bruker du da f.eks. $_SESSION['OK'] = "true" kan en annen "bare" sette den til true i sessionen. Bruker du der i mot passord og brukernavn må de vite brukernavnet og passordet. How though? Om hosten og siden din har god sikkerhet, skal ikke det være særlig lett? Hehe, har du sjekket dine webhoteller? Ta en kikke på så ser du at i mange tilfeller havner de i samme mappe alle sammen. session_save_path() kan være en nyttig funksjon Søk litt på google.com så finner du en del artikkler om det temaet. 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å