Frage zu [PHP/mySQL] Login-System mit Sessions

EchseKiuta

Mitglied
Hi,

habe bei dem Tutorial [PHP/mySQL] Login-System mit Sessions bis jetzt alles verstanden! aber bei "2. Einfügen von Testbenutzern in die Datenbank" weiss ich nicht wo ich den tag einfügen soll bzw. wenn in eine php-datei wie ich sie benennen soll!
Bei den andrere steht das immer drüber wie man die datei nennen soll!

Hoffe das ihr mir helfen könnt! Vielleicht bin ich ja auch blind...:-(

Gruss EchseKiuta
 
Zuletzt bearbeitet:
kann mir nicht bitte iner helfen.....ich checks einfach nicht was ich mit dem php befehl machen muss! in die datenbank einfügen? ein php-dokument draus machen? Wenn mit welchem namen?
 
Diese Datei dient nur dazu ein paar Beispieldatensätze in der Datenbank anzulegen um das Script testen zu können. Ich habe bei dem Tutorial bewusst alle weiteren Sachen wie Registrierung und Verwaltung der Daten weggelassen, da das dann nur noch ganz normale Datenbankanwendungen sind und nicht wirklich etwas mit dem Login zu tun haben.
Für dich ist es also egal wie du die Datei nennst ... du musst sie nur einmal auf deinem Webserver aufrufen und er trägt die Daten ein. Danach kannst du das Script testen und schauen ob es so funktioniert.
 
Übertragung von einer Tabelle in die LOGIN-Tabelle

Hi zusammen,

mir gefällt das Session-Script.
Aber ein Problem habe ich nun, eine bestehende Usertabelle in die Logintabelle zu übertragen.
Der Code für das Anlegen von Benutzern wurde im TUT so beschrieben

PHP:
<?php 
// Definition der Benutzer 
$benutzer[0]["Nickname"] ="admin"; 
$benutzer[0]["Kennwort"] = "admin"; 
$benutzer[0]["Nachname"] = "Mustermann"; 
$benutzer[0]["Vorname"] = "Max"; 

$benutzer[1]["Nickname"] = "test"; 
$benutzer[1]["Kennwort"] = "abc"; 
$benutzer[1]["Nachname"] = "Kunze"; 
$benutzer[1]["Vorname"] = "Martin"; 

// Sie können an dieser Stelle beliebig viele Benutzer anlegen. 
// Achten Sie dabei nur auf die Fortführung der Nummer. 

// Aufbau der Datenbankverbindung 
$connectionid  = mysql_connect ("localhost", "root", ""); 
if (!mysql_select_db ("LoginSystem", $connectionid)) 
{ 
  die ("Keine Verbindung zur Datenbank"); 
} 

// Zuerst alle Datensätze löschen um keine Dopplungen zu bekommen. 
mysql_query ("DELETE FROM benutzerdaten"); 

// Daten eintragen 
while (list ($key, $value) = each ($benutzer)) 
{ 
  // SQL-Anweisung erstellen 
  $sql = "INSERT INTO ". 
    "benutzerdaten (Nickname, Kennwort, Nachname, Vorname) ". 
  "VALUES ('".$value["Nickname"]."', '". 
                       md5 ($value["Kennwort"])."', '". 
                       $value["Nachname"]."', '". 
                       $value["Vorname"]."')"; 
  mysql_query ($sql); 

  if (mysql_affected_rows ($connectionid) > 0) 
  { 
    echo "Benutzer erfolgreich angelegt.<br>\n"; 
  } 
  else 
  { 
   echo "Fehler beim Anlegen der Benutzer.<br>\n"; 
  } 
} 
?>


Aber anstatt jeden User manuell einzugeben möchte ich das vorher mit einer Abfrage machen.

Hier mein nachweislich fehlerhafter Code
PHP:
<?php 
// Definition der Benutzer 
include("config.inc.php");
$db  = mysql_connect ("$dbhost", "$dbusername", "$dbkennwort"); 
$res = mysql_db_query("usertabelle", "select * from mitglieder");
$username = mysql_result($res, 0,"username");
$kennwort = mysql_result($res, 0,"kennwort");
$nachnema = mysql_result($res, 0 "nachname");
$vorname = mysql_result($res, 0, "vorname");

$benutzer[X]["Nickname"] ="$username"; 
$benutzer[X]["Kennwort"] = "$kennwort"; 
$benutzer[X]["Nachname"] = "$nachname"; 
$benutzer[X]["Vorname"] = "$vorname"; 


// Sie können an dieser Stelle beliebig viele Benutzer anlegen. 
// Achten Sie dabei nur auf die Fortführung der Nummer. 

// Aufbau der Datenbankverbindung 
include("config.inc.php");
$connectionid  = mysql_connect ("$dbhost", "$dbusername", "$dbkennwort"); 
if (!mysql_select_db ("LoginSystem", $connectionid)) 
{ 
  die ("Keine Verbindung zur Datenbank"); 
} 

// Zuerst alle Datensätze löschen um keine Dopplungen zu bekommen. 
mysql_query ("DELETE FROM benutzerdaten"); 

// Daten eintragen 
while (list ($key, $value) = each ($benutzer)) 
{ 
  // SQL-Anweisung erstellen 
  $sql = "INSERT INTO ". 
    "benutzerdaten (Nickname, Kennwort, Nachname, Vorname) ". 
  "VALUES ('".$value["Nickname"]."', '". 
                       md5 ($value["Kennwort"])."', '". 
                       $value["Nachname"]."', '". 
                       $value["Vorname"]."')"; 
  mysql_query ($sql); 

  if (mysql_affected_rows ($connectionid) > 0) 
  { 
    echo "Benutzer erfolgreich angelegt.<br>\n"; 
  } 
  else 
  { 
   echo "Fehler beim Anlegen der Benutzer.<br>\n"; 
  } 
} 
?>

Mit was muss ich denn das X bei $benutzer[X] ändern?
Oder gibt es vielleicht auch einen einfacheren Weg?


Mit freundlichen Grüßen

[K@TooN

EDIT: hat sich erledigt - siehe hier http://www.tutorials.de/forum/showthread.php?s=&threadid=167044&highlight=LoginSystem+mit+Sessions
 
Zuletzt bearbeitet:
ich gebe euch ein tip und sage euch dieses tutorial nicht zu verwenden, da dieses loginsystem nicht sicher ist.
Die Parameter der sql-Abfrage werden nicht abgesichert.
Damit ist das SKript anfällig für Angriffe, wie unter http://www.dclp-faq.de/q/q-sql-injection.html beschrieben.

Ausserdem wird LIKE verwendet, aber das %-Zeichen wird nicht ausgefiltert. Damit kann ich nicht nur das Passwort eines Benutzers, sondern das aller gleichzeitig abtesten.
user: % ; Passwort: abcde && irgendein Benutzer hat dieses saublöde Passwort -> erfolgreiche Anmeldung.
Damit muss ich zwar immer noch eine brute-force-Attacke ausführen, aber mit reichlich viel größeren Chancen, da ich halt immer alle Benutzer gleichzeitig auf ein Passwort abteste.
Hoffe, dass der Autor dieses Tutorials dies einsieht und es verbessert.
MfG,
WasserDragoon.
 
Original geschrieben von SonicBe@m
n1 one
zum glück gibs auch leute die nicht an die gutmütigkeit der menschen denkt! :)
ich arbeite zwar eh nur mit md5 sprich der user hätte garkeine möglichkeit sein pw selbst zu ändern
aber gut ,D

Wieso hätte der User denn nicht die Möglichkeit sein PW selbst zu ändern? Man kann das PW doch trotz MD5 ändern. Hmm peil ich net
 
Es gibt die methode dem user frei entscheiden zu lassen was für ein pw er will und es gibt die ein pw zu generieren
diese version unterbindet diese art von angriffe da der user wenn er ein neues pw bekommt es generiert wird

hier mal eins das auf ner ähnlichen basis aufbaut allerdings nicht die random pw version

PHP:
/* inc.sql.php */
<?
	session_start();
	require("inc.helper.php");
	// Mysql
	$db_host = "localhost";
	$db_user = "";
	$db_pass = "";
	$db_database = "";
	$conn = mysql_connect($db_host,$db_user,$db_pass) or die("verbindung wurde nicht hergestellt<br>".mysql_error());
	mysql_select_db($db_database,$conn) or die("datenbank wurde nicht selektiert<br>".mysql_error());

	$user_table = "`phpkit_user`";

	if(!function_exists("check_login")){
		function check_login(){
			if(!$_SESSION['username']){
				
				header("Location:login.php");
			}
		}
	}

	if(!function_exists("auth_user")){
		function auth_user($form_username,$form_pass){
			global $user_table;

			$query = "SELECT user_name,user_pw,user_status FROM $user_table WHERE `user_name`='$form_username'";
			$result = mysql_query($query);
			$row = mysql_fetch_assoc($result);
			if(count($row) < 1)
				return false;
		
			if($row['user_pw'] != md5($form_pass))
				return false;
			return $row['user_status'];
		}
	}
?>

PHP:
/*login.php*/
<?
session_start();
include("inc.sql.php");
$expire = 60*60*24*30; // eine stunde

if($_COOKIE['auth']){
	$value = unserialize(stripslashes($_COOKIE['auth']));
	$_SESSION['username'] = $value[0];
	$_SESSION['userstatus'] = $value[1];
	header("Location: index.php");
}
if($_SESSION['username']){
	header("Location: index.php");
}

if($_REQUEST['submit'] && $_REQUEST['username'] != "" && $_REQUEST['password'] != ""){
	if($_SESSION['userstatus'] = auth_user($_REQUEST['username'],$_REQUEST['password'])){
		$_SESSION['username'] = $_REQUEST['username'];
		
		if($_REQUEST['autologin']){
			$value = array($_SESSION['username'],$_SESSION['userstatus'],date("d.m.y - H:i:s",time()));
			$value = serialize($value);
			setcookie("auth",$value,time()+($expire));
			header("Location: index.php");
		}
	}
	header("Location: index.php");
}
?>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>todolist</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<link href="default.css" rel="stylesheet" type="text/css">
</head>

<body>
<form method="post" name="userlogin">
<table width="230" border="0" align="center" cellpadding="0" cellspacing="1" bgcolor="#000000">
	<tr bgcolor="#DDDDDD">
		<td colspan="2" class="title">
			Userlogin
		</td>
	</tr>
	<tr bgcolor="#EEEEEE">
		<td width="80" bgcolor="#EEEEEE" class="label">
			Username
		</td>
		<td>
			<input type="text" name="username" class="field">
		</td>
	</tr>
	<tr bgcolor="#EEEEEE">
		<td class="label">
			Password
		</td>
		<td>
			<input type="password" name="password" class="field">
		</td>
	</tr>
	<tr bgcolor="#EEEEEE">
		<td class="label">
			Autologin
		</td>
		<td>
			<input type="checkbox" name="autologin" value="true">
		</td>
	</tr>
	<tr align="center" bgcolor="#DDDDDD">
		<td colspan="2">
			<input type="submit" name="submit" value=" login ">
		</td>
	</tr>
</table>
</form>
</body>
</html>

und die index.php
PHP:
/* index.php */
<?
require("inc.sql.php");
check_login();

?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>by SonicBe@m</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head>

<body>
<table width="500" border="0" align="center" cellpadding="0" cellspacing="0" bgcolor="#000000">
	<tr>
		<td colspan="2" class="title">
			logged in as <?=$_SESSION['username']?>
		</td>
	</tr>
</table>
</body>
</html>

und zu letzt die logout page

PHP:
/* logout.php */
<?
session_start();
session_destroy();
setcookie("auth",$value,time());
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>todolist</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<link href="default.css" rel="stylesheet" type="text/css">
<style type="text/css">
<!--
body {
	margin-left: 0px;
	margin-top: 0px;
	margin-right: 0px;
	margin-bottom: 0px;
}
-->
</style></head>
<body >
<table width="100%" height="100" border="0" valign="center" align="center" cellpadding="0" cellspacing="1" bgcolor="#000000" onClick="window.close();">
	<tr>
		<td class="title" align="center">
			Sie haben sich erfolgreich abgemeldet!
		</td>
	</tr>
</table><br>
<script type="text/javascript">
window.opener.location.href='';
window.focus();
window.setTimeout("this.close()",2000);
</script>
</body>
</html>

wundert euch nicht
ich leite hier von der phpkit_usertable ab
da schon zuviele leute sich angemeldet hatten hab ich nun einfach diese table als usertable benutzt
 
Zuletzt bearbeitet:
Zurück