Seite 1 von 1

Warum sind " in Benutzernamen erlaubt?

Verfasst: 24.11.2005 20:03
von "..."
Der Fehler liegt anscheinend (s. meinen Benutzernamen, mit dem ich mich sogar hier registrieren konnte) im Standard-Code, obwohl im selbigen solche Benutzernamen mit " eigentlich nicht möglich sein sollten...

In functions_validate.php soll das nämlich wie folgt verhindert werden:

Code: Alles auswählen

	// Don't allow " and ALT-255 in username.
	if (strstr($username, '"') || strstr($username, '"') || strstr($username, chr(160)))
	{
		return array('error' => true, 'error_msg' => $lang['Username_invalid']);
	}
Warum aber funktioniert das augenscheinlich nicht? Fehler in meiner .php-Datei kann ich wohl ausschließen, weil das Problem ja auch hier besteht... :roll:


(Anmerkung: Erlaubt sollen " wohl deswegen nicht sein, weil damit ein potentielles Sicherheitsrisiko durch SQL-Injection besteht oder andere ungewollte "Code-Erweiterungen" in PHP oder auch Javascript möglich sein könnten, vor allem bei unsauber geschriebenen MODs, die den Usernamen dahingehend evtl. nicht korrekt "absichern"...)

Verfasst: 24.11.2005 20:18
von mad-manne
... fürwahr ein interessantes Phänomen :roll:

Hatte deinen "schrägen" Usernamen hier sofort entdeckt und geforscht.

Man kann z.B. auch nicht von deinem Profil aus, die Beiträge von dir finden, da da wohl die " vor stehen!
Am besten sollte mal einer der admins dich umbenennen bevor dadurch tatsächllich Probleme entstehen :o

Das Problem an sich ist aber definitv erforschenswert,

Gruss erstmal,
Manne.

Verfasst: 24.11.2005 22:14
von kellanved
Okay, das ist ein Bug.


Das Problem ist, daß mittlerweile der Nutzername die doppelte htmlspecialchars Behandlung bekommt. '"' wird zu """, was nicht überprüft wird.

Dir gebührt die Ehre einen Bericht auf http://www.phpbb.com/bugs/ zu posten.

Verfasst: 24.11.2005 22:37
von Christian_W
Also mal Schritt für Schritt:
Eingegebener Name: "..."
Daraus wird beim absenden: \"...\"
Das wird in der usercp_register.php hier zur Variable $username:

Code: Alles auswählen

	$strip_var_list = array('username' => 'username', 'email' => 'email', 'icq' => 'icq', 'aim' => 'aim', 'msn' => 'msn', 'yim' => 'yim', 'website' => 'website', 'location' => 'location', 'occupation' => 'occupation', 'interests' => 'interests');
	$strip_var_list['confirm_code'] = 'confirm_code';

	// Strip all tags from data ... may p**s some people off, bah, strip_tags is
	// doing the job but can still break HTML output ... have no choice, have
	// to use htmlspecialchars ... be prepared to be moaned at.
	while( list($var, $param) = @each($strip_var_list) )
	{
		if ( !empty($HTTP_POST_VARS[$param]) )
		{
			$$var = trim(htmlspecialchars($HTTP_POST_VARS[$param]));
		}
	}
In $username steht dann das hier: \"...\"

Dann kommt das Teil in die Funktion validate_username() welche gleich am Anfang die Funktion phpbb_clean_username() bemüht. Diese sieht bekanntlich so aus:

Code: Alles auswählen

function phpbb_clean_username($username)
{
	$username = substr(htmlspecialchars(str_replace("\'", "'", trim($username))), 0, 25);
	$username = phpbb_rtrim($username, "\\");
	$username = str_replace("'", "\'", $username);
	return $username;
}
Da hier wieder htmlspecialchars() benutzt wird sieht die Variable dann so aus: \"...\"
Und darauf passt die if-Abfrage dann nicht mehr.
Das ist die Ursache. Ob das ein Problem ist: Keine Ahnung. :-?
Das Profil-Problem betrifft die normale Suche z.B. nicht: http://www.phpbb.de/search.php?search_author=%22...%22

Gruß Christian

Verfasst: 24.11.2005 23:08
von PhilippK
Ich denke, dass das eher eine Altlast ist. Da wurde mal vor einiger Zeit etwas rumgebogen...
Kritisch wird's nur dann, wenn dadurch der Benutzername zu lang wird.

Gruß, Philipp

Verfasst: 25.11.2005 09:40
von Dr.Death
Sorry, aber ich habe mir gerade das Profil von "..." angesehen und habe dort auf den Link "Alle Beiträge von "..." anzeigen" geklickt.

Es wurde dann folgender Link kreiert:

http://www.phpbb.de/search.php?search_a ... %26quot%3B

Damit ist die Suche überfordert und findet: Nichts.

Verfasst: 25.11.2005 09:48
von md5()
*gg* da isses woll besser und etwa sicherer wenn man nur Bustaben und Zahlen erlaubt *gg*

Verfasst: 25.11.2005 09:49
von mad-manne
Ich denke Christian meinte die "normale" Suche nach dem Autor ...

Wenn du da einfach "..." eingibst geht es tatsächlich , aber wie auch ich schon bemekrt habe: der Suchlink aus dem Profil führt ins Leere 8)

Gruss,
Manne.

Verfasst: 25.11.2005 10:58
von Christian_W
Eigentlich meinte ich es genauso wie Manne es beschreibt.

Wo ich jetzt aber darüber nachdenke, betrifft es die Suche überhaupt nicht sondern nur die Erzeugung des Suchlinks im Profil. (Was natürlich trotzdem ein Bug ist)

Gruß Christian

Verfasst: 25.11.2005 16:02
von Mihil
@"...": Sieht wohl doch noch einem Bug aus, du solltest ihn unter http://www.phpbb.com/bugs/ melden. :wink: