genstian Skrevet 29. januar 2005 Del Skrevet 29. januar 2005 Hei hvilke sikerhets hull er det i dette login scriptet og hvordan rette det? index.php <form action="verify.php" method="post"> Username: <input type="text" name="username"><br> Password: <input type="password" name="password"><br> <input type="submit" value=" Login "> verify.php <?php $username = $_POST['username']; $password = $_POST['password']; $url = "user.php"; $user_array = array("R0","U0","U1"); //det er IKKE orginale brukernavn $pass_array = array("sta","299","123123"); //det er IKKE orginale passord $user_length = count( $user_array); for ( $i = 0; $i < $user_length; $i++ ) { if ( $username == $user_array[$i] && $password == $pass_array[$i] ) { session_start(); session_register("user"); session_register("loggedIn"); $_SESSION['user'] = $username; $_SESSION['loggedIn'] = "true"; header("Location: $url"); } } echo '<b>Verification Failed!</b>'; ?> user.php <?php session_start(); $adlog = "R0"; $Adm = "admin.php"; if ( $_SESSION['user'] == "" || $_SESSION['loggedIn'] != "true" ) { die('<b>Verification Failed!</b>'); } // display a welcome for the current user signed in echo 'Welcome to the page <b>'.$_SESSION['user'].'</b>!'; echo '[ <a href="logout.php">Logout</a> ]'; if($_SESSION['user'] = $adlog) { $admin = true; include($Adm); } ?> admin.php <?phpif($admin == true && $_SESSION['loggedIn'] = "true") { echo("Hei"); } ?> logout.php <?php session_start(); session_unset(); session_destroy(); echo '<meta http-equiv="refresh" content="5; URL=index.php">'; echo 'You have successfully logged out!<br>'; echo 'Click <a href="index.php">here</a> to log back in.'; ?> er dette sikert? Lenke til kommentar
???????? Skrevet 29. januar 2005 Del Skrevet 29. januar 2005 Dette scriptet både dårlig skrevet og lite sikkert - ikke ille ment! Dersom du er ny på PHP så er det ikke dårlig skrevet, men som et login script så er det veldig dårlig. Bruk manualen mye mer aktivt, les f.eks. om funksjonen session_register() If you are using $_SESSION (or $HTTP_SESSION_VARS), do not use session_register() Slå også opp session_destroy for å se korrekt måte å slette en session på. I tillegg så bygger du noe av login'en på å plassere innholdet i en if tag (admin.php) Du blander også bool true med string true, det gjør det bare mer uoversiktlig. Okay... dette var litt av feilene før jeg ser på sikkerheten. 1. Aldri stol på en session. Å sette en session verdi til true er et stort sikkerhetshull. Sessions er lette å hacke. 2. Du identifiserer ikke brukeren skikkelig med sessionen, på den måten kan alle som "ser" PHPSESSID ta over sessionen å være logget inn. 3. ALDRI lagre passord og brukernavn direkte i filen. Som jeg sa innledningsvis, hvis du er ny på PHP så er scriptet ikke så verst - men når du ber om kritikk på noe så viktig som login script så må det vurderes ut fra bruk. Lykke til Lenke til kommentar
genstian Skrevet 29. januar 2005 Forfatter Del Skrevet 29. januar 2005 burde jeg få den til og lese fra en fil eller? og til nummer 2en: hva skal jeg bruke da? og ja jeg er ny i PHP, men kan C++ (og OpenGL, QT, MFC, samt litt C og html) Lenke til kommentar
???????? Skrevet 29. januar 2005 Del Skrevet 29. januar 2005 Legg alle passord ol. i en egen fil som du f.eks. includer. Beskytt passordfilen med å f.eks. legge den i en egen mappe som du bruker htaccess for å holde brukere ute fra. Lagre f.eks. ip i sessionen, så sjekker du at denne ip adressen er den samme som brukeren har. Legg gjerne til flere variabler også. Ang. sette en session variabel til true, så er det bedre å lagre inntastet brukernavn og passord og sjekke dette for alle sider. Glem ikke å alltid kryptere passord. Lenke til kommentar
genstian Skrevet 29. januar 2005 Forfatter Del Skrevet 29. januar 2005 (endret) har gjort endringer i logout.php etter litt lesing nå ser den slik du: <?php session_start(); $_SESSION = array(); if (isset($_COOKIE[session_name()])) { setcookie(session_name(), '', time()-42000, '/'); } session_destroy(); echo '<meta http-equiv="refresh" content="5; URL=index.php">'; echo 'You have successfully logged out!<br>'; echo 'Click <a href="index.php">here</a> to log back in.'; ?> bedre? EDIT: har også lagt til $username = $_POST['username']; $password = $_POST['password']; for ( $i = 0; $i < $user_length; $i++ ) { if ( !$username == $user_array[$i] && $password == $pass_array[$i] ) {die("login failed");} } etter <?php i user.php og admin.php Endret 29. januar 2005 av hotstian 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å