Hallo!
Ich habe auf meiner Seite ein login realisiert mit Sessions.
Programmiert und getestet habe ich die Seite auf meinem nicht mit dem Netz verbundenen Laptop, auf dem wampp2 installiert ist. Dort funktioniert alles wunderbar.
Jetzt habe ich die Seite mal auf den 1&1 Server hochgeladen, und dort tritt folgender Fehler auf:
Zunächst kann ich mich normal einloggen. Falls der Name oder das Passwort falsch sind, kommt eine Fehlermeldung, das funktioniert also. Die Startseite im geschützten Bereich wird fehlerfrei angezeigt. Klicke ich dort nun auf einen Link, erscheint wieder der Login - Screen --> FEHLER.
Mit anderen Worten: Bei klick auf "login" wird, wenn Name & Pass richtig sind mit session_register("user") der User registriert. Auf den nachfolgenden Seiten wird mit if (session_is_registered("user")){ ...content...} else {...login...} dann aber in den else Zweig gesprungen, "user" ist also nicht registriert.
Es würde jetzt sicherlich den Rahmen sprengen, wenn ich den gesamten Code der Webseite posten würde, aber ich habe dann, um den Fehler rauszufinden, folgende Testdatei geschrieben. (Dort ist das ganze exakt so gemacht wie in der Webseite!)
Test.php:
Die Testdatei funktioniert wunderbar!!???
Die Ausgabe nach erstem aufruf:
Die Session id: f645b4fa5aea31af6d7f747ede51d7a5
Uservariabele: Stefan
Sessionvariabele: Ich war noch nicht eingeloggt
Der Link zur gleichen Seite: Link
Die Ausgabe nach klick auf link:
Die Session id: f645b4fa5aea31af6d7f747ede51d7a5
Uservariabele: Stefan
Sessionvariabele: Jetzt war ich eingeloggt
Der Link zur gleichen Seite: Link
und das komische ist:
Ich registriere mich auf der Webseite auch mit dem Usernamen "Stefan". wenn ich dann also im gleichen Browserfenster die Webseite aufrufe, bin ich sofort eingeloggt, und es funktioniert alles tadellos!
Warum klappt das Handling mit den Sessions und das registrieren der Sessionvariabelen in meiner Testdatei tadellos, in der Webseite aber nicht??? Mit wampp2 funktioniert die Webseite doch auch?!?!
Ach ja: Ausgaben werden auf der Webseite vor dem registrieren der Uservariabele nicht gemacht. Das zweite session_start() ist nicht schön, ist aber offensichtlich nicht das Problem.
Ich bin echt am Verzweifeln....
Hat jemand eine Idee, was für ein Fehler das sein könnte?
Mfg, Stefan
PS:
Überings, bei der gelegenheit habe ich natürlich auch einen echten Sicherheitsbug in unendlich vielen teilweise empfohlenen loginscripts entdeckt. Ich brauche ja wirklich nur den Usernamen, dann mein testscript einmal aufrufen, und schon kann ich mit diesem Browserfenster in den Mitgliederbereich.... Wenn ich die Session ID mit in der DB abspeichere, und dann vor aufruf jeder Seite mit der aktuellen vergleiche, ist das ganze dann sicher?
Ich habe auf meiner Seite ein login realisiert mit Sessions.
Programmiert und getestet habe ich die Seite auf meinem nicht mit dem Netz verbundenen Laptop, auf dem wampp2 installiert ist. Dort funktioniert alles wunderbar.
Jetzt habe ich die Seite mal auf den 1&1 Server hochgeladen, und dort tritt folgender Fehler auf:
Zunächst kann ich mich normal einloggen. Falls der Name oder das Passwort falsch sind, kommt eine Fehlermeldung, das funktioniert also. Die Startseite im geschützten Bereich wird fehlerfrei angezeigt. Klicke ich dort nun auf einen Link, erscheint wieder der Login - Screen --> FEHLER.
Mit anderen Worten: Bei klick auf "login" wird, wenn Name & Pass richtig sind mit session_register("user") der User registriert. Auf den nachfolgenden Seiten wird mit if (session_is_registered("user")){ ...content...} else {...login...} dann aber in den else Zweig gesprungen, "user" ist also nicht registriert.
Es würde jetzt sicherlich den Rahmen sprengen, wenn ich den gesamten Code der Webseite posten würde, aber ich habe dann, um den Fehler rauszufinden, folgende Testdatei geschrieben. (Dort ist das ganze exakt so gemacht wie in der Webseite!)
Test.php:
PHP Code:
<?php
session_start();
if (session_is_registered('user')){
session_start();
$_SESSION["session_var_1"] = "Jetzt war ich eingeloggt";
Seite_ausspucken();
}
else {
$user = "Stefan";
session_register("user");
session_start();
$_SESSION["session_var_1"] = "Ich war noch nicht eingeloggt";
Seite_ausspucken();
};
?>
<?php
function Seite_ausspucken(){
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
</head>
<body>
<?php
echo "Die Session id: " . session_id() . "<br>";
echo "Uservariabele: " . $_SESSION["user"] . "<br>";
echo "Sessionvariabele: " . $_SESSION["session_var_1"] . "<br>";
?>
Der Link zur gleichen Seite: <a href="Test.php">Link</a>
</body>
</html>
<?php
};
?>
Die Ausgabe nach erstem aufruf:
Die Session id: f645b4fa5aea31af6d7f747ede51d7a5
Uservariabele: Stefan
Sessionvariabele: Ich war noch nicht eingeloggt
Der Link zur gleichen Seite: Link
Die Ausgabe nach klick auf link:
Die Session id: f645b4fa5aea31af6d7f747ede51d7a5
Uservariabele: Stefan
Sessionvariabele: Jetzt war ich eingeloggt
Der Link zur gleichen Seite: Link
und das komische ist:
Ich registriere mich auf der Webseite auch mit dem Usernamen "Stefan". wenn ich dann also im gleichen Browserfenster die Webseite aufrufe, bin ich sofort eingeloggt, und es funktioniert alles tadellos!
Warum klappt das Handling mit den Sessions und das registrieren der Sessionvariabelen in meiner Testdatei tadellos, in der Webseite aber nicht??? Mit wampp2 funktioniert die Webseite doch auch?!?!
Ach ja: Ausgaben werden auf der Webseite vor dem registrieren der Uservariabele nicht gemacht. Das zweite session_start() ist nicht schön, ist aber offensichtlich nicht das Problem.
Ich bin echt am Verzweifeln....
Hat jemand eine Idee, was für ein Fehler das sein könnte?
Mfg, Stefan
PS:
Überings, bei der gelegenheit habe ich natürlich auch einen echten Sicherheitsbug in unendlich vielen teilweise empfohlenen loginscripts entdeckt. Ich brauche ja wirklich nur den Usernamen, dann mein testscript einmal aufrufen, und schon kann ich mit diesem Browserfenster in den Mitgliederbereich.... Wenn ich die Session ID mit in der DB abspeichere, und dann vor aufruf jeder Seite mit der aktuellen vergleiche, ist das ganze dann sicher?
Comment