Login-Script mit sha1

walle_89

Mitglied
Hallo liebe Programmierergemeiden!

Ich bin letztens auf ein Problem gestoßen, und zwar funktioniert mein Script nicht mehr, nachdem ich auf sha1 umgestiegen bin (war vorher md5 und der Umstieg war gezwungen :(). Es sieht folgendermaßen aus.

logged_out.php
PHP:
<form method="post" action="login.php">
	<input name="username" type="text" value=""><br><br><br>
	<input name="userpass" type="password" value=""><br><br>
	<input style="width:64px;height:28px;border:0;background:0;" name="login" type="image" src="img/layout/imgButtonLogin.png" value="Login" alt="Login">&nbsp;&nbsp;&nbsp;<div style="margin:-26px 0 0 68px;font-weight:bold;"><a href="http://www.vs-sponsoring.com/agb/">| Zu den AGB »</a></div>
</form>

login.php

PHP:
<?php
	session_start();
	include('inc/login.inc.php');

	if (isset($_POST['login'])) {
		$userid = check_user($_POST['username'], $_POST['userpass']);
		$_SESSION['id'] = $userid;
		if ($userid != false) {
			login($userid);
			header ("Location: index.php");
		} else {
			echo 'Fehler beim Login!';
		}
	}
?>

die nötigen Funktionen unter inc/login.inc.php

PHP:
function check_user($name, $pass) {
  $password = sha1($pass);
	$sql = "SELECT id FROM players WHERE name='".$name."' AND pw='".$password."' LIMIT 1";
	$result = mysql_query($sql) or die(mysql_error());
	if ( mysql_num_rows($result) == "1") {
		$user = mysql_fetch_assoc($result);
		return $user['id'];
	} else {
		return false;
	}
}

function login($userid) {
	$sql = "UPDATE players SET session='".session_id()."', WHERE id=".$userid;
	mysql_query($sql);
}

Ich weiß auch nicht recht, wie und wo ich anfangen soll zu debuggen, da es an sich "nur" an der Umstellung von md5 auf sha1 lag/liegt/liegen müsste.

Habt ihr Tipps, wie ich das Problem lösen könnte? Oder sehe ich im Moment den Wald vor lauter Bäume nicht?

Gruß, walle_89

P.S. Die "logged_out.php" wird in eine Seite included - hat somit Zugang zu <html>, etc.
 
Die User eingetragen? Meinst du damit das Anmelden oder das Einloggen?

Anmelden: Im Moment nicht möglich, die nötigen Sachen habe ich noch nicht fertig, d.h., dass die Benutzer manuell eingetragen worden sind.

Einloggen: Das Einloggen erfolgt mit Hilfe dieser beiden Funktionen => die Verbindung zur MySQL-DB besteht!! Das kann ich an Hand anderer Funktionen (Auslesen mancher anderer Bereiche) erkennen.

Nochmal als Hilfe die DB-Tabelle, wo "sessions" eingetragen werden muss
PHP:
CREATE TABLE IF NOT EXISTS `players` (
  `server_id` int(11) NOT NULL,
  `id` int(11) NOT NULL,
  `name` varchar(255) collate utf8_unicode_ci default NULL,
  `email` varchar(255) collate utf8_unicode_ci default NULL,
  `session` varchar(32) character set utf8 default NULL,
  `pw` varchar(128) collate utf8_unicode_ci default NULL,
  `lastchannel` int(11) default NULL,
  `texture` longblob,
  `last_active` timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP,
  UNIQUE KEY `id` (`server_id`,`id`),
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

--
-- Daten für Tabelle `players`
--

INSERT INTO `players` (`server_id`, `id`, `name`, `email`, `session`, `pw`, `lastchannel`, `texture`, `last_active`) VALUES
(1, 1, 'vilius', NULL, NULL, '40bd001563085fc35165329ea1ff5c5ecbdbbeef', 1, NULL, '2009-02-22 18:36:19'),
(1, 2, 'walle', NULL, NULL, '49bcabc6ab90b7de6d47b27b5dacd56aa4f78224', 1, NULL, '2009-02-21 22:01:28');
 
An welcher Stelle hakt es denn überhaupt?

Da liegt auch das Problem - ich weiß es nicht ... Und ich habe gehört, dass man nach jedem einzelnen Vorgang einen Stop einbauen soll und gucken soll, ob das Script bis zu einer bestimmten Stelle einwandfrei funktioniert ...
Und inwiefern hat es bei dir tadellos funktioniert? Was genau hast du denn getestet?

Gruß
 
Ich frag mal das blödeste:
Hast du die MD5 Werte durch den Hash-Generator gejagt und in SHA1 umgewandelt oder die "richtigen" Passwörter im Klartext?
und
Ist dein pw Feld wirklich 128 lang oder (warum auch immer) noch 32 ? (btw: 40 reicht glaube ich)

Stop-Punkte setzen schaffst bei PHP zum Beispiel in Eclipse mit XDebug, falls du Eclipse verwendest und schon so weit bist mit PHP.
 
Zuletzt bearbeitet:
Hi,

ein simpler Weg zu Debuggen wäre, an verschiedenen Stellen Variablen testhalber ausgeben zu lassen.
In Deiner Login-Funktion fehlt jegliche Fehlerbehandlung.
Bei fehlgeschlagenen Abfragen hilft z.B. [phpf]mysql_error[/phpf].

LG
 
Zurück