Passwort falsch bei Registrierung

Garo_TheOne

Grünschnabel
Hallo zusammen,

ich hab mich hier schon umgeguckt, hab aber für mein Problem noch nichts gefunden!

Ich hab eine Datenbank erstellt, wo leute sich regestrieren können!
Die Registrierung verläuft ohne Probleme, die Daten werden einbahnfrei in die Datenbank eingetragen!

Doch beim Login kommt die Meldung (die ich auch gemacht macht habe, falls sowas passiert), dass das Passwort falsch ist! Ich bin mir aber defenetiv sicher das das Passwort richtig ist!

Ich poste euch mal den Code:

SQL-Datenbank:
PHP:
CREATE TABLE IF NOT EXISTS `signup` (
  `firstname` varchar(60) NOT NULL,
  `lastname` varchar(60) NOT NULL,
  `email` varchar(60) NOT NULL,
  `username` varchar(60) NOT NULL,
  `password` varchar(60) NOT NULL,
  `password_confirm` varchar(60) NOT NULL,
  PRIMARY KEY  (`username`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;


registrierung (index.php)
PHP:
<?php


define('IN_ILOGIN', true);

require_once("ilogin_core.inc.php");


function simpleRandString($length=16, $list="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ")
{
    mt_srand((double)microtime()*1000000);
    $newstring="";

    if($length>0)
    {
        while(strlen($newstring)<$length)
        {
            $newstring.=$list[mt_rand(0, strlen($list)-1)];
        }
    }
    return $newstring;
}


$action = ilogin_get_post("action");

$ilogin_title = "$ilogin_siteName ";
if (("$action" == "confirm") && (!$ilogin_demoMode))
{
    $ilogin_title = "$ilogin_siteName - New User Confirmation";
}
else if ("$action" == "add")
{
    $ilogin_title = "$ilogin_siteName ";
}
else
{
    $action = "signup";
    $ilogin_title = "$ilogin_siteName ";
}

echo <<<EOF
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<HTML>
<HEAD>
<TITLE>$ilogin_title</TITLE>
<META HTTP-EQUIV="Content-Type" content="text/html; charset=utf-8">
<META HTTP-EQUIV="Content-Language" CONTENT="EN">
</HEAD>

<BODY BGCOLOR="$ilogin_pageBackgroundColour" TEXT="$ilogin_textColour">

<CENTER>

<H1>$ilogin_title</H1>

EOF;

if ("$action" == "signup")
{
    echo <<<EOF

<FORM ACTION="$PHP_SELF" METHOD="POST">
  <TABLE BORDER="0" WIDTH="350" NOWRAP="NOWRAP" BGCOLOR="$ilogin_formBackgroundColour">
   <TR>
    <TD><B>Um auf die Gallery zu zugreifen, müssen Sie sich registrieren</B><BR>
        <BR><BR>
    </TD>
   </TR>

   <TR><TD><INPUT TYPE="text" NAME="firstname"> Vorname *</TD></TR>
   <TR><TD><INPUT TYPE="text" NAME="lastname"> Nachname *</TD></TR>
   <TR><TD><INPUT TYPE="text" NAME="email"> E-Mail Addresse *</TD></TR>
   <TR><TD><B>Wähle ein Nickname</B><BR>
           <INPUT TYPE="text" NAME="username"> Nickname *</TD></TR>
   <TR><TD><B>Wähle ein Passwort</B><BR>
           <INPUT TYPE="password" NAME="password"> Passwort *<BR>
           <INPUT TYPE="password" NAME="password_confirm"> Passwort Wiederholen *</TD></TR>

EOF;



echo <<<EOF
   <TR><TD><INPUT TYPE="submit" VALUE="Registrieren"><INPUT TYPE="RESET" VALUE="Felder löschen"></TD></TR>
  </TABLE>
 <INPUT TYPE="hidden" NAME="action" VALUE="add">
</FORM>

EOF;

}
else if ("$action" == "add")
{
    $user = strip_tags(strtolower(ilogin_get_post("username")));
    $pass = strtolower(ilogin_get_post("password"));
    $pass_confirm = strtolower(ilogin_get_post("password_confirm"));
    $firstname = strip_tags(ilogin_get_post("firstname"));
    $lastname = strip_tags(ilogin_get_post("lastname"));
    $email = ilogin_get_post("email");
    if ($user == "")
    {
        $signupError .= "<P>Geben Sie ein Namen ein!";
    }
    else if (!ereg("^[a-z0-9]+$", $user))
    {
        $signupError .= "<P>Ihr Usernamen verfuegt ueber ungueltige Zeichen!.";
    }
    else if (!$ilogin_demoMode)
    {
        $result = mysql_query("select * from $ilogin_table where username='$user'", $ilogin_db);

  
        if (($result) && ($row = mysql_fetch_object($result)))
        {
            $signupError .= "<P>Der Name wird bereits verwendet!";
        }
    }

    if (strlen($pass) < 6)
    {
        $signupError .= "<P>Dein Passwort muss laenger wie 6 Zeichen sein!";
    }
    else if (ereg($user, $pass))
    {
        $signupError .= "<P>Dein Password darf nicht wie dein Nickname sein!.";
    }
    else if (!ereg("^[a-z0-9]+$", $pass))
    {
        $signupError .= "<P>Die E-Mail Adresse wird bereits verwendet!";
    }
    else if ($pass != $pass_confirm)
    {
        $signupError .= "<P>Die Passwoerter sind nicht gleich!";
    }

    if ($email == "")
    {
        $signupError .= "<P>Tragen Sie eine E-Mail Adresse ein!";
    }
    else if (!eregi( '^[-_\.a-z0-9]+@([-a-z0-9]+\.)+[a-z]{2,}$', $email))
    {
        $signupError .= "<P>Diese E-Mail Adresse existiert nicht!";
    }

    if (("$firstname" == "") || ("$lastname" == ""))
    {
        $signupError .= "<P>Du musst einen vollen Namen eingeben.";
    }


    if ("$signupError" == "")
    {
        if ($ilogin_demoMode)
        {
            echo <<<EOF
<P>In Demo Mode. User account will not be created or verification email sent.

EOF;
        }
        else
        {
            mysql_query ("INSERT INTO $ilogin_table (username, password, email, firstname, lastname, status) VALUES ('$user', '$pass', '$email', '" . mysql_escape_string($firstname) . "', '" . mysql_escape_string($lastname) . "', 'New' )", $ilogin_db);

            if (($result = mysql_query ("SELECT id FROM $ilogin_table WHERE username='$user'")) &&
                ($item = mysql_fetch_object($result)))
            {
                $id = $item->id;
            }



            if ($ilogin_verifyEmailAddresses)
            {
                $confirm = simpleRandString();


                mysql_query("UPDATE $ilogin_table SET confirm='$confirm' WHERE username='$user'", $ilogin_db);




                echo("<P>Danke, deine Registrierung war erfolgreich, du kannst dich nun einloggen!");
            }
            else
            {
                if (!$ilogin_demoMode)
                {
                    mysql_query("UPDATE $ilogin_table SET status='Active' WHERE username='$user'", $ilogin_db);
                    ilogin_write_htpasswd();
                }
                echo <<<EOF
<P>Dein Account ist Eingetragen du kannst dich nun an die  <A HREF="$ilogin_protectedUrl">Passwoerter geschuetzen protected Seiten</A> dich aufhalten.

EOF;
            }
        }
    }
    else
    {
        echo <<<EOF
<P>Ueberpruefe bitte deine Angaben!

<SCRIPT LANGUAGE="JavaScript">
<!--
document.write("<A HREF=\"javascript:history.back()\">go back</A>");
// -->
</SCRIPT>

<NOSCRIPT>

</NOSCRIPT>



$signupError

EOF;
    }
}
else if ("$action" == "confirm")
{
    $id = ilogin_get_post("id");
    $confirm = ilogin_get_post("confirm");

    $result = mysql_query ("SELECT * FROM $ilogin_table WHERE id='$id' AND confirm='$confirm' AND status='New'");
    if ((! $result) || (mysql_num_rows($result) < 1))
    {
        echo <<<EOF
<H1>ERROR</H1>
<P>Invalid confirmation. Did you already confirm your membership?

EOF;
    }
    else
    {
        mysql_query("UPDATE $ilogin_table SET status='Active' WHERE id='$id'", $ilogin_db);
        ilogin_write_htpasswd();
        echo <<<EOF
<P>Danke für die Bestätigung.
<P>Du kannst dich nun überall mit <A HREF="$ilogin_protectedUrl">Passworten geschützen protected Seiten</A> aufhalten.

EOF;
    }
}



echo <<<EOF

</CENTER>
</BODY>
</HTML>

EOF;

if (!$ilogin_demoMode)
{
    mysql_close($ilogin_db);
}

?>



login_config.inc (für reg)
PHP:
<?php



if ( !defined('IN_ILOGIN') )
{
    die("Hacking attempt");
}





$ilogin_sql_server = "localhost";
$ilogin_sql_username = "garo";
$ilogin_sql_password = "xxxxxx";
$ilogin_sql_database = "garo_login";



$ilogin_siteName = "Registrieren";


$ilogin_adminEmail = "g.adanali@web.de";



$ilogin_protectedUrl = "/members";


$login_adminPassword = "secret";



$ilogin_table = "ilogin";



$ilogin_htpasswd_path = ".htpasswd";



$ilogin_recordPostalAddress = True;
$ilogin_recordPhoneNumber = True;
$ilogin_recordIcq = True;



$ilogin_verifyEmailAddresses = True;



$ilogin_demoMode = False;


$ilogin_pageBackgroundColour = "#ffffff";
$ilogin_formBackgroundColour = "#ffffff";
$ilogin_textColour = "#000000";


$ilogin_useMd5 = False;

?>



index.php (für login)
PHP:
  <?php

  require("connect.inc.php");
  ?>
  <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
  <html>
  <head>
    <title>Login</title>
 <link rel="stylesheet" type="text/css" href="styles2.css">
  </head>
  <body>
  <?php if(!isset($_POST['submit'])) { ?>
  <form action="<?php $PHP_SELF ?>" method="post">
  <table width="400" bgcolor="#000000" border="0" cellpadding="5" cellspacing="1" align="center">
    <tr>
      <td bgcolor="#e7e7e7" align="center" colspan="2">
      <b>Bitte erst anmelden</b>
      </td>
    </tr>
    <tr>
      <td width="170" bgcolor="#e7e7e7">Benutzername</td>
      <td width="230" bgcolor="#ffffff"><input type="text" name="username" size="20" class="input"<?php if($_POST['username'] != "" ) {echo ' value="'.$_POST['username'].'"';} ?>></td>
    </tr>
    <tr>
      <td width="170" bgcolor="#e7e7e7">Passwort</td>
      <td width="230" bgcolor="#ffffff"><input type="password" name="password" size="20" class="input"></td>
    </tr>
    <tr>
      <td bgcolor="#e7e7e7" align="center" colspan="2">
      <input type="submit" name="submit" value="Anmelden" class="button">
      </td>
    </tr>
 </table>
  </form>
 <?php
  }elseif(!$_POST['username'] || $_POST['username'] == "") {
    echo '<p align="center">Einen Benutzernamen brauchen wir schon ^^<br><br><a href="index2.php">Zurueck</a></p>';
  }elseif(!$_POST['password'] || $_POST['password'] == "") {
    echo '<form action="index2.php" method="post">';
    echo '<p align="center">Ein Passwort brauchen wir schon ^^<br><br>';
    echo '<input type="hidden" name="username" value="'.$_POST['username'].'">';
    echo '<input type="submit" name="zurueck" value="Zurueck">';
    echo '</p>';
    echo '</form>';
  }else{
    $password = md5($password);
    $query = @mysql_query("SELECT username, password FROM ilogin WHERE username = '".$_POST['username']."'") or die('ERROR!');
    $result = @mysql_fetch_array($query) or die('<p align="center">Sorry, aber dieser Benutzername existiert nicht!<br><a href="index2.php">Zurueck</a></p>');
    if($password != $result['password']){
    echo '<form action="index2.php" method="post">';
      echo '<p align="center">Dein Passwort ist Falsch! -.-<br><br>';
      echo '<input type="hidden" name="username" value="'.$_POST['username'].'">';
      echo '<input type="submit" name="zurueck" value="Zurueck"></p>';
      echo '</form>';
      die;
    }else{
      $username = $result['username'];
      session_register('username');
      echo '<p align="center">LogIn erfolgreich! ^^<br><br><a href="sichere_seite.php">Weiter</a></p>';
    }
 }
  ?>
  </body>
  </html>



login.php
PHP:
<?php 
// Session starten
session_start ();

// Datenbankverbindung aufbauen 
$connectionid = mysql_connect ("localhost", "xxxxxx", "xxxxxx"); 
if (!mysql_select_db ("garo_login", $connectionid)) 
{ 
  die ("Keine Verbindung zur Datenbank"); 
} 

$sql = "SELECT ". 
    "id, username, lastname, firstname ". 
  "FROM ". 
    "signup ". 
  "WHERE ". 
    "(username like '".$_REQUEST["username"]."') AND ". 
    "(password = '".md5 ($_REQUEST["password"])."')"; 
$result = mysql_query ($sql); 

$num_rows = (mysql_num_rows $result);
{ 
   $data = mysql_fetch_array ($result); 

   $_SESSION["user_id"] = $data["id"]; 
  $_SESSION["user_username"] = $data["username"]; 
  $_SESSION["user_lastname"] = $data["lastname"]; 
  $_SESSION["user_firstname"] = $data["firstname"]; 

  header ("Location: intern.php"); 
} 
 
?>



Ich hoffe ihr könnt mir weiterhelfen.
Wenn ich weitere codes braucht, poste ich die auch!

Ach ja, egal wieviele Leute ich in die Datenbank eintrage, selbst über SQL, der fehler kommt immer das das Passwort falsch ist.
Wenn ein user nicht erkannt ist, sagt er mir das aber auch!
Nur die Funktion scheint ein fehler zu haben!

Greetz
GTO
 
So wie ich das sehe schreibst du das Passwort bei der Registrierung unverschlüsset in die Datenbank, vergleichst es beim Login jedoch mit dem verschlüsselten.

Also müsstest du bei der Registrierung lediglich noch ein md5() anwenden und es sollte (nach erneuter Anmeldung) funktioniere. :)
 
So wie es scheint, liegt der Fehler in der index.php

Versuch doch mal statt
PHP:
$password = md5($password);
folgendes:
PHP:
$password = md5($_POST['password']);
 
Glaube ich nicht. :)
registrer_globals scheint aktiviert zu sein, da er auch auf
PHP:
$PHP_SELF
zugreift.

Dennoch solltest Steusi's Einwand nachgehen und am besten in deiner php.ini register_globals deaktiveren. Andernfalls bekommst du in Zukunft auf jeden Fal Probleme mit deinem Script.

Was genau registrer_globals bewirkt kannst du hier im Forum sicher nachlesen.
 
"(username like '".$_REQUEST["username"]."') AND ".
"(password = '".md5 ($_REQUEST["password"])."')"
Erstmal: Bei so etwas sicherheitsrelevantem wie einer Passwort-Abfrage mit LIKE zu arbeiten anstelle einem anstaendigen Vergleich (wie Du es ja beim Passwort machst) finde ich hoechst fahrlaessig.
Ausserdem solltest Du Dich mal mit SQL-Injektionen befassen, denn in der Form in der Du den Usernamen uebergibst laesst sich durchaus das gesamte Login umgehen.
Zu guter Letzt moechte ich an dieser Stelle noch von der Verwendung von $_REQUEST abraten.
$_REQUEST ist dazu da Daten zu holen die sowohl ueber POST als auch ueber GET kommen koennen. Da Du mit einem Formular zum Login arbeitest kannst Du festlegen ob POST oder GET genutzt werden soll, vorzugsweise verschickt man natuerlich ein Formular ueber POST, entsprechend sollte auch mit $_POST gearbeitet werden.
Das stellt jetzt keine Security-Problem dar, ist aber, meiner Meinung nach, sauberer.

So wie ich das sehe schreibst du das Passwort bei der Registrierung unverschlüsset in die Datenbank, vergleichst es beim Login jedoch mit dem verschlüsselten.
Sehe ich aehnlich. Hab den Code nur kurz ueberflogen, konnte jetzt aber nicht sehen dass das Passwort beim Eintrag in die Datenbank gehasht wird.
 
Erstmal danke für eure Antworten!


Das von Steusi:

So wie es scheint, liegt der Fehler in der index.php

Versuch doch mal statt
PHP:
$password = md5($password);
folgendes:
PHP:
$password = md5($_POST['password']);


hat leider nicht geklappt, aber das mit dem unverschlüssel in der Dankenbank kann durchaus sein. (Ich sehe die passwörter in der SQL datenbank). Wie kann ich dieses umgehen?

Mfg
Garo
 
PHP:
mysql_query ("INSERT INTO $ilogin_table (username, password, email, firstname, lastname, status) VALUES ('$user', '".md5($pass)."', '$email', '" . mysql_escape_string($firstname) . "', '" . mysql_escape_string($lastname) . "', 'New' )", $ilogin_db);
 
EDIT: haste denn mal geguckt ob der user auch existiert? :) auf anhieb sehe ich da keinen fehler
 
Zuletzt bearbeitet:
Zurück