PHP Passwort Vergessen Button

Hey Leute ;)

habe Neuigkeiten....habe den Fehler gefunden.
Ich weiß blos noch nicht so ganz, wie ich ihn behebe, ohne die Sicherheit herab zu setzen :D

@ComFreek: Das mit dem ZIP wird nicht mehr nötig sein, da ich das Problem wie gesagt gefunden habe ;)

@DeeJTwoK: Mit dem Link ist alles in Ordnung.

Das Problem ist folgendes:

An der Stelle, an der ich die Daten per GET abhole, hatte ich bislang mysql_real_escape_string drinnen.
Zur Erinnerung hier diese Code-Passage:
PHP:
$id = mysql_real_escape_string($_GET['id']); 
$username = mysql_real_escape_string($_GET['username']);

Zu Versuchszwecken habe ich das entfernt und es hat sofort alles funktioniert. Habe das ganze auch mit exit($sql) überprüft und sofort alle Daten angezeigt bekommen.

D.h. diese Code-Passage sieht nun wie folgt aus:

PHP:
$id = $_GET['id'];
$username = $_GET['username'];

Was ist Eure Meinung dazu?
Wie kann ich die Sicherheitslücke wieder schließen, die durch das Entfernen von mysql_real_escape_string entstehen würde?

Vielen Dank schonmal ;)

LG Zneaf =)
 
Das würde ja heißen, dass mysql_real_escape_string() deine Variablen $_GET['id'] und $_GET['username'], die vorher einen Wert haben, kaputt macht und einen leeren String zurückgibt.

Das halte ich persönlich für sehr unwahrscheinlich bis unmöglich.

Das würde ja auch heißen, dass dir dieser Code in deiner pwreset.php:
PHP:
<?php

$id = mysql_real_escape_string($_GET['id']);
$username = mysql_real_escape_string($_GET['username']); 

exit("GET-id:'".$_GET['id']."' GET-username:'".$_GET['username']."' id:'".$id."' username:'".$username."'");

//...

folgenden Output gibt:
Code:
GET-id:'d4cb01021a46628ba6afe9f6a472c9317be9efaa' GET-username:'Zneaf' id:'' username:''


Füge diese drei Zeilen bitte mal ganz oben in deine pwreset.php und gib uns den Output des exit()-Statements.
 
Hi zusammen ;)

@DeeJTwoK: wenn es unmöglich wäre, würde das ganze auch dann nicht funktionieren, wenn ich mysql_real_escape_string drinnen habe :p

Hab das ganze mal gemacht und folgendes angezeigt bekommen:
Code:
GET-id:'d4cb01021a46628ba6afe9f6a472c9317be9efaa' GET-username:'Flex' id:'' username:''

Was genau sagt uns dann denn nun?^^

LG Zneaf ;)
 
Das sagt uns, dass du Recht hast und mysql_real_escape_string() leere Werte zurückgibt. Sorry, aber das erschien mir echt seeehr unwahrscheinlich

Nach einem Blick in die Doku mysql_real_escape_string() habe ich noch festgestellt, dass es eine bestehende Datenbank-Verbindung geben muss, damit die Funktion auch weiß, welche Zeichen wie escaped werden müssen.

Du musst also erstmal ein mysql_connect() auf deine Datenbank machen und dann entweder die Verbindung als weiteren Parameter an die mysql_real_escape_string() übergeben oder mysql_real_escape_string() erkennt die geöffnete Verbindung selbst. In beiden Fällen darfst du mysql_real_escape_string() erst NACH mysql_connect() aufrufen.
 
Huhu ;)

alles klar...versuch ich mal.

Nun habe ich aber noch eine andere Frage:

Sobald der User sein PW geändert hat, soll die pw_reset_id in der DB gelöscht werden.
Allerdings auch NUR diese pw_reset_id und logischerweise keine anderen Benutzerdaten^^

Dafür habe ich momentan folgenden Code:

PHP:
// SQL-Anweisung basteln, um die PW-Reset-ID zu löschen.
$sqldelete = "DELETE
		pw_reset_id
	      FROM
		user
	      WHERE
		username='".$username."'";

// SQL-Anweisung an die DB schicken und im Fehlerfall eine Meldung ausgeben.
$resultdelete = mysql_query($sqldelete,$db);

Allerdings funktioniert das ganze nicht so richtig...

Hast du vllt. ne Ahnung, woran es liegen könnte?^^

Dankeschön =)

LG Zneaf
 
Ja, ich weiß, warum das nicht funktioniert, aber generell:
Wenn ein SQL "nicht so richtig" funktioniert:
  1. Das SQL statement durch exit() ausgeben lassen
  2. Das angezeigte SQL statement kopieren und in phpMyAdmin ausführen
  3. Fehlermeldung in phpMyAdmin angucken und Gedanken drüber machen
  4. Notfalls die Fehlermeldung googlen oder die richtige Syntax des SQL nachschlagen: Doku
  5. Siehe auch Yaslaw's Tutorial: PHP/MySQL Debug Queries
  6. Wenn gar nichts hilft: Hier posten, und zwar MIT genauer Fehlermeldung

Gruß
 
Hey ;)

danke erstmal.

Habe folgendes angezeigt bekommen:

MySQL meldet: Dokumentation
#1109 - Unknown table 'pw_reset_id' in MULTI DELETE


Aber ich kann mir nicht so wirklich erklären, was das heißen soll....die spalte pw_reset_id gibts ja.

Kannst du mir vllt. helfen? =)

LG Zneaf
 
Ich hätte persönlich auch nicht an mysql_real_escape_string() als Fehlerquelle gedacht!

Du musst dafür ein UPDATE nehmen:
PHP:
$sql = "UPDATE users SET pw_reset_id=''";
Mit DELETE kannst du nur Datensätze löschen, mit INSERT überschreiben wir einfach pw_reset_id (mit einem leeren String).
 
Hey Leute ;)

ich wollte mich nochmals für Eure tolle Hilfe und Unterstützung bedanken.
Ihr wart wiedermal echt super ;)

Habe das Problem gelößt, indem ich beim Updaten des Passworts auch gleich die pw_reset_id löschen lasse.

Hier der Code:
PHP:
require_once("config.php");
$sql = "UPDATE
	user
            SET
	password=MD5('".$password."'),
	pw_reset_id=''
            WHERE
	username='".$username."'";

// SQL-Anweisung an die DB schicken und im Fehlerfall eine Meldung ausgeben.
$res = mysql_query($sql) or exit( __LINE__.', '.__FILE__.'<br />' .mysql_error());

Also...Vielen Dank nochmal für alles ;)

Ich schließe das Thema nun =)

LG Zneaf =)
 
Zurück