Einzelnen Beitrag anzeigen
  #1 (permalink)  
Alt 17-09-2007, 22:33
Alpenmerlin
 Registrierter Benutzer
Links : Onlinestatus : Alpenmerlin ist offline
Registriert seit: Feb 2004
Beiträge: 22
Alpenmerlin ist zur Zeit noch ein unbeschriebenes Blatt
Standard Login mit Sessions

Hallo zusammen,

ich beschäftige mich erst seit heute Morgen mit dem Thema Login mit Hilfe von Cookies und Sessions usw. Habe es aber geschafft ne rudimentäre Userverwaltung aufzubauen die mit PHP, MySQL und Sessions arbeitet.

Nun würde mich interessieren ob ihr den Schutz für ausreichend haltet. Später sollen über die Datenbank Daten wie eMail-Adressen usw. gespeichert werden. Es wäre also ganz gut, wenn man nicht ohne weiteres auf die Daten zugreifen kann.

Das hier ist mein Code:
PHP-Code:
<?
function logged_in() {
    
$sql "SELECT UserID FROM users WHERE UserSession='".session_id()."' LIMIT 1";
    
$query mysql_query($sql);
    if (
mysql_num_rows($query) == 1)
        return 
true;
    else
        return 
false;
}

function 
check_pwd($userName$userPass) {
    
$sql "SELECT UserID AS UserID FROM users WHERE UserName='".$userName."' AND UserPass=MD5('".$userPass."') LIMIT 1;";
    
$query mysql_query($sql);
    if (
mysql_num_rows($query) == 1) {
        
$user mysql_fetch_array($query);
        return 
$user['UserID'];
    }
    else
        return 
false;
}

function 
update_session($userId) {
    
$sql "UPDATE users SET UserSession='".session_id()."' WHERE UserID=".$userId;
    
$query mysql_query($sql);
    if (
mysql_affected_rows() == 1){
        return 
true;
    }
    else {
        return 
false;
    }
}

function 
logout() {
    
$sql "UPDATE users SET UserSession = NULL WHERE UserSession='".session_id()."'";
    
$query mysql_query($sql);
    if (
mysql_affected_rows() == 1)
        return 
true;
    else
        return 
false;
}



session_name("sessionid");    
session_start(); 
require_once(
"connectdb.php");
connectdb("test");
if (isset(
$_POST['sent'])) { 
    
$_POST['sent']=0;
    
$userid check_pwd($_POST['userName'], $_POST['userPass']); 
    if (
$userid) {
        
update_session($userid);
    }
    else {
        echo 
"LogIn fehlgeschlagen!";
        
session_destroy();
    }

    
if (!
logged_in()) 
    echo 
'    <form method="post" action="'.$_SERVER["PHP_SELF"].'"> 
            <label>User: &nbsp;</label><input name="userName" type="text"><br> 
            <label>PWD: </label><input name="userPass" type="password"><br> 
            <input type="submit" value="Eintragen">
            <input type="reset">
            <input type="hidden" name="sent" value="1">
            </form>'

else 
    echo 
'<a href="logout.php">Ausloggen</a>'
?>
Wie man sieht, überprüfe ich die Anmeldung mit Hilfe der SessionID. Die Frage ist nur, wie sicher diese Art der Anmeldung ist. Denn die SessionID bleibt ja in der MySQL Tabelle stehen. Wenn es nicht sicher genug ist, stellt sie die Frage, wie man das verbessern kann.

Der Aufbau der MySQL Tabelle ist wie folgt:
PHP-Code:
UserID      int(11)         PRI    NULL    auto_increment
UserName    varchar
(30)         UNI          
UserPass    varchar
(32)                    
UserSession varchar(32)    YES         NULL     
UserMail    varchar
(150)         UNI 
Ich hoffe ihr könnt damit etwas anfangen und mir evtl. auch helfen. Danke schonmal für die Hilfe!

Gruß Alpenmerlin
Mit Zitat antworten