Gå til innhold

sikerhets hull i login script?


Anbefalte innlegg

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

<?php

if($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
Videoannonse
Annonse

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 :thumbup:

Lenke til kommentar

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

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