Avatar

Und noch ein Problem (German / Deutsch)

by Auge ⌂, Sunday, September 12, 2010, 15:01 (4976 days ago) @ Birgit

Hallo

Wie ich schon sagte, im Originalquelltext ist das nicht nachvollziehbar. Dehalb noch einmal die Frage: Hast du irgendwelche Anpassungen am Skript vorgenommen/vornehmen lassen?


Sorry, die Frage hatte ich vergessen zu beantworten. Nein, ich habe nichts am Script geändert oder ändern lassen.

Gut, dann wäre das geklärt.

Unwahrscheinlich, wenn auch nicht unmöglich. Das einzige, was diese beiden Fehlerbilder auf den ersten Blick verbindet, ist die Datenbank. Im einen Fall muss aus ihr gelesen werden, um die Emailadresse des vom Passwortverlust betroffenen Benutzers zu ermitteln, im anderen soll in die Datenbank geschrieben werden. Ansonsten fallen mir keine Berührungspunkte deiner Beobachtungen ein.


Ich denke auch, dass es mit der Datenbank zusammenhängt, da die Fehler ja erst mit dem Umzug aufgetreten sind. Und jetzt eben fällt mir etwas ein: Soweit ich mich entsinne, lief das "alte" Forum, also das, welches umgezogen ist, noch mit einer älteren Software-Version! Auf dem Server, auf den es dann umgezogen ist, hatte ich aber schon die jetzige Version installiert. Kann es vielleicht daran liegen?

Welche Version war denn auf dem alten Server installiert? Das Changelog gibt Auskunft über die Änderungen der einzelnen Versionen, ich möchte aber nicht alles durchsuchen müssen um etwaige Änderungen an den relevanten Stellen zu finden.

[edit]Du hattest das Problem der Nichtspeicherung deiner Einstellungen ja schon angesprochen. Wo du immer wieder den vollzogenen Umzug deines Forums ansprichst, kommt mir in diesem Zusammenhang der Gedanke, dass du mal deine Datenbankverbindungseinstellungen überprüfen solltest (config/db_settings.php), nicht, dass du die eins-zu-eins vom alten Forum mitgenommen hast und irgendwas fehlkonfiguriert ist.[/edit]


Ich habe gerade nachgesehen, da stimmen alle Angaben.

Nun gut. Wäre auch zu einfach gewesen. :-)

Das Forum braucht ganz offensichtlich einen Debug-Mode, in dem die PHP- wie auch etwaige MySQL-Meldungen an den Admin durchgereicht werden (Error Log entweder am Bildschirm oder als Datei).


Was bedeutet das?

Während der Entwicklung von PHP-Skripten arbeitet man am besten mit der Anzeige aller Meldungen, die PHP einem liefert. So spürt man von Parsing-Fehlern bis zur nicht initialisierten Variable alle Fehler, die dem PHP-Interpreter aufstoßen, auf. Die Meldungen werden im Browser ausgegeben. Das geschieht mit folgendem Code am Anfang eines jeden direkt aufzurufenden Skripts.

ini_set('display_errors', 1);
error_reporting(E_ALL);

Im laufenden Betrieb ist das aber kontraproduktiv. Einerseits sollten dann keine solchen Meldungen erscheinen, weil man deren Ursachen beseitigt hat, andererseits verunsichern sie die einen Benutzer und geben anderen (den "Bösen") Anhaltspunkte für Angriffsszenarien. Deshalb landen dennoch anfallende Meldungen dann in einer Datei auf dem Server außerhalb der DocRoot, wo nur du als Admin (z.B. per FTP) Zugriff hast. Für Meldungen, die von MySQL stammen, gilt das Gleiche. Während der Entwicklung gehören sie in die Browserausgabe, danach in die Logdatei.

In deinem Fall liegt die Sache etwas anders. Das nicht erfolgende Speichern der Einstellungen fällt in die oben beschriebene Kategorie, das Senden bestimmter Emails an die falsche Adresse aber nicht.

Die Email wird an das in der php.ini angegebenen Emailserverprogramm übergeben, es gibt also keinen PHP-Fehler. Es müsste also über die versendeten Emails Buch geführt werden. Da gehört, so angegeben, der Absender, der oder die Empfänger und der Zweck/Betreff der Email rein, nicht aber der Text. Somit ließe sich feststellen, dass z.B. eine Passwortreminder-Email gesendet wurde und an wen die Email ging.

So, um mal den Code durchzuarbeiten:

Der Vorgang der Neuvergabe eines Passworts setzt sich aus mehreren Schritten zusammen. Als erstes sagt man an, dass man sein Passwort vergessen hat. Es wird ein vorübergehend gültiger Code generiert und eine Email gesendet. Als Betroffener muss man nun einen Link in dieser Email betätigen, um ein neues Passwort zu vergeben. Dabei wird der Code aus der DB mit dem aus der Email verglichen, um den Betätiger des Links zu authentifizieren.

Das läuft in mlf2 so (siehe includes/login.inc.php). Im Abschnitt case "pw_forgotten_submitted" wird die erste Email mit dem zu betätigenden Link generiert und gesendet, im folgenden Abschnitt case "activate" wird der Link aus der ersten Email ausgewertet und eine zweite Email gesendet, in der das neue Passwort steht.

Allerdings wirst du, so du PHP-Quelltexte lesen kannst, feststellen, dass in keinem der beiden Abschnitte eine Email an den Admin generiert wird. Nach dem Lesen der Benutzerdaten, dem Generieren des vorübergehend notwendigen Codes bzw. des neuen Passworts und deren Hinterlegung in der DB wird der Text der Emails zusammengesetzt und an die Funktion my_mail übergeben. In beiden Fällen wird als erster Parameter der Empfänger der Email ($field['user_email']), der aus der jeweils ersten Abfrage der Benutzerdaten im konkreten Block stammt, übergeben.

Ermittelt werden die Benutzerdaten über die eingegebene Emailadresse (case "pw_forgotten_submitted") bzw. bei case "activate" über die in der ersten gesendeten ersten Email angegebene user-ID (GET-Parameter activate).

Auch die aufgerufene Funktion my_mail (siehe functions.inc.php) enthält keinen Hinweis auf eine Kopie an den Admin. Es wird aber zwingend ein Header eingefügt, der den Absender der Email enthält. Der enthält entweder einen im Skript an die Funktion übergebenen Absender oder, so dieser nicht an die Funktion übergeben wurde, die Forumsemailadresse, die typischerweise mit der des Admins übereinstimmt.

<spekulation>Vorstellen könnte ich mir, dass die Konfiguration des Emailaccounts bei deinem Webspaceanbieter so aussieht, dass du eine Kopie aller über den Emailaccount gesendeten Emails erhältst.</spekulation>

Wenn meine Spekulation nicht zutrifft, bleibt nur übrig, dass bei der Anforderung eines neuen Passworts (Schritt 1) von vornherein die Daten des Admins anstatt der des betroffenen Benutzers von der DB zurückgegeben werden. Dann bekommst du als Admin die Email mit dem Link, der Benutzer aber keine Email. Ist das so?

Tschö, Auge

--
Trenne niemals Müll, denn er hat nur eine Silbe!


Complete thread:

 RSS Feed of thread