Problem mit Login
Malte
- php
Hi, ich habe ein Problem, ich habe eine Seite, sie heißt login.php, aber die USer können sich nicht nur auf dieser Seite einoggen. Auf den anderen Seiten ist links im Menü ein login. Wenn man dann auf Login klick werden die Daten übertragen und auf der Seite login.php in die Felder eingetragen. Wenn ich mich dann einloggen will, heißt es immer flascher Login obwohl die Daten richtig sind.
wenn ich jetzt direkt auf die Seite login.php gehe klappt es auch nicht. wenn ich dann auf der Seite login.phpdies tages wegnehmen
value="<?php echo $username1 ?>"
value="<?php echo $password1 ?>"
dann klappt es, aber ich will sie nicht wegnehmen, könnt ihr mir helfen?
loginformular
<?php
if (isset ($_REQUEST["fehler"]))
{
echo "<span style=\"color:red\">Ihr Logindaten sind Falsch.</span>";
}
?>
<?php
if(isset($_POST["login"]))
{
$password1 = $_POST["password"];
$username1 = $_POST["username"];
}
else
{
$username1 = "Username";
$password1 = "Password";
}
?>
<table class="login">
<tr>
<td width="180" background="layout/hgnavtop2.jpg">
<p align="center"><font face="Verdana" size="2" color="#001E73">Login</font>
</td>
</tr>
<tr>
<td width="180" bgcolor="#B1BDC7">
<form align="center" method="POST" action="check_user.php">
<p align="center">
<b>
<font color="#001E73" face="Verdana" size="2">Username:</font></b><br>
<input type="text" name="username" size="20" class="eingabe" value="<?php echo $username1 ?>" <font color="#FFFFFF" face="Verdana" size="2"><br>
</font><b><font color="#001E73" face="Verdana" size="2">Password:</font></b><br>
<input type="password" name="password" size="20" class="eingabe" value="<?php echo $password1 ?>"><br>
<font face="Verdana" size="2"> </font><br>
<input type="submit" value="Login" name="B1" class="submit"></p>
</form>
Und hier die Überprüfung:
<?php
// Session starten
session_start ();
// Datenbankverbindung aufbauen
$connectionid = mysql_connect ("localhost", "root", "");
if (!mysql_select_db ("air-war", $connectionid))
{
die ("Keine Verbindung zur Datenbank");
}
$sql = "SELECT ".
"id ,username, password ".
"FROM ".
"user ".
"WHERE ".
"(username like '".$_POST["username"]."') AND ".
"(password = '".$_POST["password"]."')";
$result = mysql_query ($sql);
if (mysql_num_rows ($result) > 0)
{
// Benutzerdaten in ein Array auslesen.
$data = mysql_fetch_array ($result);
// Sessionvariablen erstellen und registrieren
$_SESSION["user_id"] = $data["id"];
$_SESSION["user_username"] = $data["username"];
$_SESSION["user_password"] = $data["password"];
header ("Location: user.php");
}
else
{
header ("Location: login.php?fehler=1");
}
?>
Danke für eure Hilfe
Hi,
$sql = "SELECT ".
"id ,username, password ".
"FROM ".
"user ".
"WHERE ".
"(username like '".$_POST["username"]."') AND ".
^^^^^^
"(password = '".$_POST["password"]."')";
$result = mysql_query ($sql);
Warum like? mach stattdessen = denn wenn jemand %a% als username
eingiebt, und als pwd z.B. "password" und es giebt einen usernamen in
dem ein a oder A vorkommt z.B. bei "Hans" und dieser hat das pwd
"password" dann ist derjenige als dieser eingeloggt, das ist eine
sicherheitslücke, meines Errachtens nach zumindest. AFAIK wird auch bei
einem = zwischen groß und kleinschreibung nicht unterschieden.
MfG
hi,
Warum like? mach stattdessen = denn wenn jemand %a% als username
eingiebt, und als pwd z.B. "password" und es giebt einen usernamen in
dem ein a oder A vorkommt z.B. bei "Hans" und dieser hat das pwd
"password" dann ist derjenige als dieser eingeloggt, das ist eine
sicherheitslücke
die ist aber auch darüber hinaus noch vorhanden, weil benutzerparameter ungeprüft in die query übernommen werden, stichwort sql injection.
mysql_(real_)escape_string() zu benutzen, wäre das mindeste.
gruß,
wahsaga
Hi Malte,
Kleine Anmerkung:
echo "<span style="color:red">Ihr Logindaten sind Falsch.</span>";
Das muss "Ihre" heißen und "Falsch" schreibt man klein ;-)
MfG, Dennis.