Hallo Leute,
folgendes Problem. In den folgenden Quellcodes wird u.a. eine Login-Seite geöffnet, mit der ich mich in einen geschützten Member-Bereich einloggen kann. Die Login-Seite öffnet sich ohne Probleme. Wenn ich mich dann anmelde, dann werde ich auf die Seite index.php geleitet. Ich will aber auf eine die Seite geheim_profi.php. In dem form Tag steht auch PHP_SELF. Ich glaube das ist das Problem, ich weiß aber nicht wie ichs lösen kann. Danke schon mal für eure Hilfe.
Hier der Hauptteil der Login-Seite:
error\_reporting( 0 ); // Erzwingen das Session-Cookies benutzt werden und die SID nicht per URL transportiert wird ini\_set( 'session.use\_only\_cookies', '1' ); ini\_set( 'session.use\_trans\_sid', '0' ); // Session starten session\_start(); // Sicherstellen das die SID durch den Server vergeben wurde // um einen möglichen Session Fixation Angriff unwirksam zu machen if (!isset( $\_SESSION['server\_SID'] )) { // Möglichen Session Inhalt löschen session\_unset(); // Ganz sicher gehen das alle Inhalte der Session gelöscht sind $\_SESSION = array(); // Session zerstören session\_destroy(); // Session neu starten session\_start(); // Neue Server-generierte Session ID vergeben session\_regenerate\_id(); // Status festhalten $\_SESSION['server\_SID'] = true; } // Funktionen einbinden include( 'funktionen.inc.php' ); // Variablen deklarieren $\_SESSION['angemeldet'] = false; $conid = ''; $eingabe = array(); $anmeldung = false; $update = false; $fehlermeldung = ''; // Datenbankverbindung öffnen $conid = db\_connect(); // Wenn das Formular abgeschickt wurde if (isset( $\_POST['login'] )) { // Benutzereingabe bereinigen $eingabe = cleanInput(); // Benutzer anmelden $anmeldung = loginUser( $eingabe['benutzername'], $eingabe['passwort'], $conid ); // Anmeldung war korrekt if ($anmeldung) { // Benutzer Identifikationsmerkmale in DB speichern $update = updateUser( $eingabe['benutzername'], $conid ); // Bei erfolgreicher Speicherung if ($update) { // Auf geheime Seite weiterleiten header( 'location: geheim\_profi.php' ); exit; } else { $fehlermeldung = ' ### Bei der Anmeldung ist ein Problem aufgetreten!'; } } else { $fehlermeldung = ' Die Anmeldung war fehlerhaft! '; } } ?\> Ohne\_Titel\_1 Login Benutzer: Passwort: <?php // Falls die Fehlermeldung gesetzt ist
if ($fehlermeldung) echo $fehlermeldung; ?\> <?php if (isset($_GET['page'])) {
$page = $\_GET['page']; } else { $page = 'home'; } include("pages/$page.php"); ?\> Hier die Seite funktionen.ini.php: <?php /* *************************** */
/\* \*\*\* Datenbankverbindung \*\*\* \*/ /\* \*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\* \*/ function db\_connect() { // Zugangsdaten für die DB $dbhost = '\*\*\*'; $dbuser = '\*\*\*'; $dbpass = '\*\*\*'; $dbname = '\*\*\*'; // Verbindung herstellen und Verbindungskennung zurück geben $conid = mysql\_connect( $dbhost, $dbuser, $dbpass ) or die( 'Verbindungsfehler!' ); if (is\_resource( $conid )) { mysql\_select\_db( $dbname, $conid ) or die( 'Datenbankfehler!' ); } return $conid; } /\* \*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\* \*/ /\* \*\*\* Benutzereingabe bereinigen \*\*\* \*/ /\* \*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\* \*/ function cleanInput() { // Maskierende Slashes aus POST Array entfernen if (get\_magic\_quotes\_gpc()) { $eingabe['benutzername'] = stripslashes( $\_POST['benutzer'] ); $eingabe['passwort'] = stripslashes( $\_POST['passwort'] ); } else { $eingabe['benutzername'] = $\_POST['benutzer']; $eingabe['passwort'] = $\_POST['passwort']; } // Trimmen $eingabe['benutzername'] = trim( $eingabe['benutzername'] ); $eingabe['passwort'] = trim( $eingabe['passwort'] ); // In Kleinschrift umwandeln $eingabe['benutzername'] = strtolower( $eingabe['benutzername'] ); // Eingabe zurückgeben return $eingabe; } /\* \*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\* \*/ /\* \*\*\* Benutzer anmelden \*\*\* \*/ /\* \*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\* \*/ function loginUser( $benutzer, $passwort, $conid ) { // Anweisung zusammenstellen $sql = "SELECT `passwort_zusatz` FROM `login_profi` WHERE LOWER(`benutzername`) = '" .mysql\_real\_escape\_string( $benutzer ). "' AND `aktiviert` = 1"; // Anweisung an DB schicken $ergebnis = mysql\_query( $sql, $conid ); // Wurde ein Datensatz gefunden, existiert dieser Benutzername, also // prüfen wir ob die Anmeldedaten korrekt ist if (mysql\_num\_rows($ergebnis) == 1) { $datensatz = mysql\_fetch\_array( $ergebnis ); // Resourcen freigeben mysql\_free\_result( $ergebnis ); // Anmeldepasswort vorbereiten $zusatz = $datensatz['passwort\_zusatz']; $anmeldepw = md5( $passwort.$zusatz ); // Anweisung zusammenstellen $sql = "SELECT `id`, `fehlversuche` FROM `login_profi` WHERE LOWER(`benutzername`) = '" .mysql\_real\_escape\_string( $benutzer ). "' AND `passwort` = '" .mysql\_real\_escape\_string( $anmeldepw ). "' AND `aktiviert` = 1"; // Anweisung an DB schicken $ergebnis = mysql\_query( $sql, $conid ); // Prüfen ob ein Datensatz gefunden wurde. In dem Fall stimmen die Anmeldedaten if (mysql\_num\_rows( $ergebnis ) == 1) { // Counter für Fehlversuche resetten $angriff = mysql\_fetch\_array( $ergebnis ); if ($angriff['fehlversuche'] != 0) { $sql = "UPDATE `login_profi` SET `fehlversuche` = 0 WHERE LOWER(`benutzername`) = '" .mysql\_real\_escape\_string( $benutzer ). "' LIMIT 1"; mysql\_query( $sql, $conid ); } // Resourcen freigeben mysql\_free\_result( $ergebnis ); // Korrekte Anmeldung zurückgeben return true; } else { // Das angegebene Passwort war nicht korrekt, also gehen wir von einem Angriffsversuch aus // und erhöhen den Counter der fehlerhaften Anmeldeversuche $sql = "UPDATE `login_profi` SET `fehlversuche` = `fehlversuche` + 1 WHERE LOWER(`benutzername`) = '" .mysql\_real\_escape\_string( $benutzer ). "' LIMIT 1"; mysql\_query( $sql, $conid ); // Abfragen ob das Limit von 10 Fehlversuche erreicht wurde und in diesem Fall ... $sql = "SELECT `fehlversuche` FROM `login_profi` WHERE LOWER(`benutzername`) = '" .mysql\_real\_escape\_string( $benutzer ). "'"; $ergebnis = mysql\_query( $sql, $conid ); $anzahl = mysql\_fetch\_array( $ergebnis ); mysql\_free\_result( $ergebnis ); // ... das Konto deaktivieren if ($anzahl['fehlversuche'] \> 9) { $sql = "UPDATE `login_profi` SET `fehlversuche` = 0, `aktiviert` = 0 WHERE LOWER(`benutzername`) = '" .mysql\_real\_escape\_string( $benutzer ). "' LIMIT 1"; mysql\_query( $sql, $conid ); } } } } /\* \*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\* \*/ /\* \*\*\* Benutzer Datensatz aktualisieren \*\*\* \*/ /\* \*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\* \*/ function updateUser( $benutzer, $conid ) { // Benutzer-Datensatz aktualisieren $sql = "UPDATE `login_profi` SET `ip` = '" .mysql\_real\_escape\_string( $\_SERVER['REMOTE\_ADDR'] ). "', `benutzerinfo` = '" .mysql\_real\_escape\_string( $\_SERVER['HTTP\_USER\_AGENT'] ). "', `anmeldung` = '" .mysql\_real\_escape\_string( md5( $\_SERVER['REQUEST\_TIME'] ) ). "', `zuletzt_aktiv` = NOW() WHERE LOWER(`benutzername`) = '" .mysql\_real\_escape\_string( $benutzer ). "' LIMIT 1"; mysql\_query( $sql, $conid ); // Prüfen ob der datensatz aktualisiert wurde if (mysql\_affected\_rows( $conid ) == 1) { // Session Variablen setzen $\_SESSION['angemeldet'] = true; $\_SESSION['benutzername'] = $benutzer; $\_SESSION['anmeldung'] = md5( $\_SERVER['REQUEST\_TIME'] ); return true; } } /\* \*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\* \*/ /\* \*\*\* Status des Benutzers prüfen \*\*\* \*/ /\* \*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\* \*/ function checkUser( $conid ) { // Alte Session löschen und Sessiondaten in neue Session transferieren session\_regenerate\_id( true ); if ($\_SESSION['angemeldet'] !== true) return false; // Benutzerdaten aus DB laden $sql = "SELECT `ip`, `benutzerinfo`, `anmeldung`, UNIX\_TIMESTAMP(`zuletzt_aktiv`) as zuletzt\_aktiv FROM `login_profi` WHERE `benutzername` = '" .mysql\_real\_escape\_string( $\_SESSION['benutzername'] ). "' AND `aktiviert` = 1"; $ergebnis = mysql\_query( $sql, $conid ); if (mysql\_num\_rows( $ergebnis ) == 1) { $benutzerdaten = mysql\_fetch\_array( $ergebnis ); // Resourcen freigeben mysql\_free\_result( $ergebnis ); // Daten aus der DB mit den Benutzerdaten vergleichen if ($benutzerdaten['ip'] != $\_SERVER['REMOTE\_ADDR']) return false; if ($benutzerdaten['benutzerinfo'] != $\_SERVER['HTTP\_USER\_AGENT']) return false; if ($benutzerdaten['anmeldung'] != $\_SESSION['anmeldung']) return false; if (($benutzerdaten['zuletzt\_aktiv'] + 600) und hier die Seite,geheim\_profi.php, die eigentlich erscheinen soll: <?php // Erzwingen das Session-Cookies benutzt werden und die SID nicht per URL transportiert wird
ini\_set( 'session.use\_only\_cookies', '1' ); ini\_set( 'session.use\_trans\_sid', '0' ); // Session starten session\_start(); // Funktionen einbinden include( 'funktionen.inc.php' ); // Datenbankverbindung öffnen $conid = db\_connect(); // Benutzer prüfen if (!checkUser( $conid )) { resetUser(); } // Benutzer abmelden if (isset($\_GET['benutzer']) == 'abmelden') { resetUser(); } ?\>phpBuddy.eu - Geheime Seite Willkommen im geschützten Bereich! :wink: ["\>Benutzer abmelden](%3C?php%2520echo%2520%2524_SERVER%255B'PHP_SELF'%255D.%2520)