Seite 1 von 2

Passwort über externes Skript ändern - Sonderzeichen-Problem

Verfasst: 11.03.2014 02:13
von CMCMCM
Hallo,
ich würde gerne über ein externes Skript das Passwort von bereits registrierten phpBB-Usern direkt in der Datenbank ändern. Hierfür lese ich das neue Passwort über ein Eingabefeld ein, generiere den Hash-Wert über die Funktion "phpbb_hash" und schreibe es dann in der "phpBB_users" Tabelle der Datenbank in das Feld "user_password" des entsprechenden Forenusers. Für die Generierung des Hash-Wertes nutze ich den folgenden Code:

Code: Alles auswählen

$phpbb_root_path = 'forum/';
if (!defined('IN_PHPBB')) // phpBB not already included, than include required files
{
    define('IN_PHPBB', true); // must be set to include phpbb-files
    $phpEx = substr(strrchr(__FILE__, '.'), 1);

    include $phpbb_root_path . 'common.' . $phpEx;
    include $phpbb_root_path . 'includes/functions_display.' . $phpEx;
}


require $phpbb_root_path . 'config.php'; // include config for database-data  

$passwort = $_POST["neuesPasswort"];
$passwortHash = phpbb_hash($passwort);
Das ganze funktioniert auch soweit. Probleme gibt es allerdings, wenn im neuen Passwort Anführungszeichen (") auftauchen. Dann kann ich mich danach mit dem verwendeten Passwort nicht in den Forenaccount einloggen. Es scheint ein spezifisches Problem der phpbb_hash Funktion zu sein, denn im selben Skript erstelle ich vom neuen Passwort für einen anderen Login einen normalen sha1-Hash und hier funktioniert das Einloggen auch mit Anführungszeichen im Passwort.

Hat jemand eine Idee, wie ich das Problem lösen kann. Also wie ich aus einem Passwort, das Anführungszeichen enthält, einen gültigen phpBB-Hash erzeugen kann?

Bin für jeden Lösungsansatz dankbar.

Viele Grüße
Christian

Re: Passwort über externes Skript ändern - Sonderzeichen-Pro

Verfasst: 11.03.2014 08:56
von godmod23
Das externe Skript, hast du es auch in UTF8 ohne Bom gespeichert? Kannst du z.B. mit Notepad++ einstellen.
Sind nämlich die Kodierungen der Skripte unterschiedlich, gibt es Probleme mit Sonderzeichen. Deswegen alle Skripte auf die gleiche Kodierung einstellen.

Re: Passwort über externes Skript ändern - Sonderzeichen-Pro

Verfasst: 11.03.2014 12:29
von CMCMCM
Danke für den Tip!
Ich habe die Datei im Mac Texteditor in UTF-8 gespeichert. Im header steht

Code: Alles auswählen

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
Leider funktioniert es trotzdem nicht.
Folgendes funktioniert z.B. nicht als Passwort: hallo"$
Das hier aber schon: hallo$$

Ich denke es liegt daran, dass die Anführungszeichen in PHP escaped werden?

So klappt es aber leider auch nicht:

Code: Alles auswählen

$passwortHash = phpbb_hash(stripslashes($passwort));

Re: Passwort über externes Skript ändern - Sonderzeichen-Pro

Verfasst: 11.03.2014 13:12
von posaunen
[quote="CMCMCM"]
$passwort = $_POST["neuesPasswort"];
[/code]
Zu viele Anführungszeichen.

Versuch mal so: $passwort = $_POST[neuesPasswort]; oder: $passwort = $_POST[neuesPasswort];

Vielleicht ist auch die php-Funktion addslashes() für dich interessant.

Re: Passwort über externes Skript ändern - Sonderzeichen-Pro

Verfasst: 11.03.2014 13:30
von CMCMCM
posaunen hat geschrieben:
CMCMCM hat geschrieben: $passwort = $_POST["neuesPasswort"];
[/code]
Zu viele Anführungszeichen.

Versuch mal so: $passwort = $_POST[neuesPasswort]; oder: $passwort = $_POST[neuesPasswort];

Vielleicht ist auch die php-Funktion addslashes() für dich interessant.
Danke für die Tips!
Habe alles ausprobiert:
$passwort = $_POST[neuesPasswort]; und $passwort = $_POST['neuesPasswort']; ändert beides nichts am Problem.
Und mit $passwortHash = phpbb_hash(addslashes($passwort)); funktioniert es auch nicht :-(

Re: Passwort über externes Skript ändern - Sonderzeichen-Pro

Verfasst: 11.03.2014 13:34
von posaunen
Hast du dir den Inhalt von $passwort mal ausgeben lassen?

Re: Passwort über externes Skript ändern - Sonderzeichen-Pro

Verfasst: 11.03.2014 13:39
von CMCMCM
hier stand unsinn

Re: Passwort über externes Skript ändern - Sonderzeichen-Pro

Verfasst: 11.03.2014 13:54
von posaunen
???
Du hast das:
$passwort = $_POST["neuesPasswort"]; als Teil deines codes gepostet. - Wo soll da der Hashcode herkommen? Räum vielleicht erstmal auf.

Es gibt auch die Funktion stripslashes() .

Re: Passwort über externes Skript ändern - Sonderzeichen-Pro

Verfasst: 11.03.2014 14:01
von CMCMCM
Ja du hast recht, sorry, bin grade völlig durcheinandergekommen.

Folgende Ausgaben erhalte ich für $passwort:
Eingabe: hallo$$
Ausgabe: hallo$$

Eingabe: hallo"$
Ausgabe: hallo\"$


Für $passwortHash erhalte ich wie erwartet einen Hashcode.

Re: Passwort über externes Skript ändern - Sonderzeichen-Pro

Verfasst: 11.03.2014 14:25
von posaunen
posaunen hat geschrieben: Es gibt auch die Funktion stripslashes() .