FluxBB.fr

Le site des utilisateurs francophones de FluxBB.

Vous n'êtes pas identifié(e).

#26 05-02-2012 16:24:58

Wan
Membre
Inscription : 12-02-2010
Messages : 555
Site Web

Re : More Information About Online Users

Bonjour Otomatic et merci pour l'info.
L’inconvénient c'est que si ces caractères sont sûrs de ne pas se retrouver dans $pun_user['username'] c'est qu'effectivement ils perturbent le code lui-même : si j'essaye de mettre un "[" ou un  "\" dans mon code il va être interprété pour ce qu'il est...
Du coup je ne vois pas bien ce que je pourrais mettre à moins éventuellement de modifier le register.php pour éliminer d'autres caractères devenus indésirables par mon propre code (dommage, j'ai vraiment envie de changer le moindre de choses possible...)

Hors ligne

#27 10-02-2012 19:42:35

Wan
Membre
Inscription : 12-02-2010
Messages : 555
Site Web

Re : More Information About Online Users

Bonjour,
La version 1.1 est en cours, patience, mais comme (j'espère) beaucoup d'entre vous j'ai un taff qui me mange beaucoup de temps. Bref, j'ai quand même pris du temps pour (enfin !) installer un forum test en local avec Wampserver et un autre en ligne pour pouvoir tester valablement.
Dans cette version à venir : ajout de stats sur les topics et les utilisateurs.
Une question, pouvez- vous me confirmer qu'un séparateur dans un explode peut contenir plusieurs caractères ?

ex :

explode('abcd', $chaine);

Dernière modification par Wan (10-02-2012 19:46:23)

Hors ligne

#28 10-02-2012 20:45:19

Otomatic
Régisseur
Lieu : Paris, France
Inscription : 12-12-2005
Messages : 3 660
Site Web

Re : More Information About Online Users

Bonjour,

Comme d'habitude, toujours aller voir la documentation (En français, s'il vous plaît) sur le site officiel :

fonction explode

où il est écrit : que le délimiteur est de type string.


Ce n'est pas parce que l'erreur se propage qu'elle devient vérité. Gandhi
Sont différents : ça et sa - est et ait - à et a - ce et se - mes et mais ou met - été et était - c'est et ces - ce-si et ceci
La vie sans musique est tout simplement une erreur, une fatigue, un exil. Friedrich Nietzsche

Hors ligne

#29 11-02-2012 00:41:07

Wan
Membre
Inscription : 12-02-2010
Messages : 555
Site Web

Re : More Information About Online Users

Merci Otomatic !
J'avais bien vu le string, mais aucun exemple (à part un \n) utilisant plus d'un caractère.
Donc du coup je vais pouvoir me servir de BBcodes comme séparateurs et ainsi éviter qu'ils ne se retrouvent dans les username. Ca sera encore plus propre. wink

Hors ligne

#30 11-02-2012 12:43:58

Wan
Membre
Inscription : 12-02-2010
Messages : 555
Site Web

Re : More Information About Online Users

Bonjour.
J'ai vraiment un problème avec ces séparateurs d'explode.
Je rappelle mon problème : comme j'enregistre dans une chaîne des usename, j'essaye de trouver un (ou une suite de) caractère(s) qui ne peut pas se retrouver dans les usename, afin de faire ensuite un explode propre.
Suivant les conseils d'Otomatic, et en analysant la fonction check_username, l'idée est d'utiliser les caractères interdits dans les username à l'inscription. Apparemment, sont interdits d'emblée : '[' et ']' en même temps, '\'' et '"', comme on peut le voir à la 17ième ligne de la fonction check_username :

function check_username($username, $exclude_id = null)
{
	global $db, $pun_config, $errors, $lang_prof_reg, $lang_register, $lang_common, $pun_bans;

	// Convert multiple whitespace characters into one (to prevent people from registering with indistinguishable usernames)
	$username = preg_replace('%\s+%s', ' ', $username);

	// Validate username
	if (pun_strlen($username) < 2)
		$errors[] = $lang_prof_reg['Username too short'];
	else if (pun_strlen($username) > 25) // This usually doesn't happen since the form element only accepts 25 characters
		$errors[] = $lang_prof_reg['Username too long'];
	else if (!strcasecmp($username, 'Guest') || !strcasecmp($username, $lang_common['Guest']))
		$errors[] = $lang_prof_reg['Username guest'];
	else if (preg_match('%[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}%', $username) || preg_match('%((([0-9A-Fa-f]{1,4}:){7}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){6}:[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){5}:([0-9A-Fa-f]{1,4}:)?[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){4}:([0-9A-Fa-f]{1,4}:){0,2}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){3}:([0-9A-Fa-f]{1,4}:){0,3}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){2}:([0-9A-Fa-f]{1,4}:){0,4}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){6}((\b((25[0-5])|(1\d{2})|(2[0-4]\d)|(\d{1,2}))\b)\.){3}(\b((25[0-5])|(1\d{2})|(2[0-4]\d)|(\d{1,2}))\b))|(([0-9A-Fa-f]{1,4}:){0,5}:((\b((25[0-5])|(1\d{2})|(2[0-4]\d)|(\d{1,2}))\b)\.){3}(\b((25[0-5])|(1\d{2})|(2[0-4]\d)|(\d{1,2}))\b))|(::([0-9A-Fa-f]{1,4}:){0,5}((\b((25[0-5])|(1\d{2})|(2[0-4]\d)|(\d{1,2}))\b)\.){3}(\b((25[0-5])|(1\d{2})|(2[0-4]\d)|(\d{1,2}))\b))|([0-9A-Fa-f]{1,4}::([0-9A-Fa-f]{1,4}:){0,5}[0-9A-Fa-f]{1,4})|(::([0-9A-Fa-f]{1,4}:){0,6}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){1,7}:))%', $username))
		$errors[] = $lang_prof_reg['Username IP'];
	else if ((strpos($username, '[') !== false || strpos($username, ']') !== false) && strpos($username, '\'') !== false && strpos($username, '"') !== false)
		$errors[] = $lang_prof_reg['Username reserved chars'];
	else if (preg_match('%(?:\[/?(?:b|u|s|ins|del|em|i|h|colou?r|quote|code|img|url|email|list|\*|topic|post|forum|user)\]|\[(?:img|url|quote|list)=)%i', $username))
		$errors[] = $lang_prof_reg['Username BBCode'];

	// Check username for any censored words
	if ($pun_config['o_censoring'] == '1' && censor_words($username) != $username)
		$errors[] = $lang_register['Username censor'];

	// Check that the username (or a too similar username) is not already registered
	$query = ($exclude_id) ? ' AND id!='.$exclude_id : '';

	$result = $db->query('SELECT username FROM '.$db->prefix.'users WHERE (UPPER(username)=UPPER(\''.$db->escape($username).'\') OR UPPER(username)=UPPER(\''.$db->escape(ucp_preg_replace('%[^\p{L}\p{N}]%u', '', $username)).'\')) AND id>1'.$query) or error('Unable to fetch user info', __FILE__, __LINE__, $db->error());

	if ($db->num_rows($result))
	{
		$busy = $db->result($result);
		$errors[] = $lang_register['Username dupe 1'].' '.pun_htmlspecialchars($busy).'. '.$lang_register['Username dupe 2'];
	}

	// Check username for any banned usernames
	foreach ($pun_bans as $cur_ban)
	{
		if ($cur_ban['username'] != '' && utf8_strtolower($username) == utf8_strtolower($cur_ban['username']))
		{
			$errors[] = $lang_prof_reg['Banned username'];
			break;
		}
	}
}

Or, curieusement, j'arrive pour ma part en test, en local et avec une version 1.4.8 propre et d'origine, à m'enregistrer avec des pseudos genre : Wan"Wan, Wan[Wan]Wan etc...
Vous auriez une explication ?

Dernière modification par Wan (11-02-2012 13:00:22)

Hors ligne

#31 11-02-2012 13:04:46

Wan
Membre
Inscription : 12-02-2010
Messages : 555
Site Web

Re : More Information About Online Users

A tout bien réfléchir, cette fameuse 17ème ligne teste plutôt si on a [ ou ] en même temps que \' et "... curieux... y aurait pas un petit bug ou j'ai encore rien compris ?... neutral

Hors ligne

#32 11-02-2012 15:57:32

Wan
Membre
Inscription : 12-02-2010
Messages : 555
Site Web

Re : More Information About Online Users

Wan a écrit :

A tout bien réfléchir, cette fameuse 17ème ligne teste plutôt si on a [ ou ] en même temps que \' et "... curieux... y aurait pas un petit bug ou j'ai encore rien compris ?... neutral

Bon, ça y est, j'ai compris : pour pouvoir enregistrer un username pouvant perturber le code (ex : récupérer une variable de fluxBB lors de l'affichage du username) il faudrait absolument utiliser à la fois [ (ou ]), \' et ".
Du coup, je viens de tester : [ u ] ou [ s ] (sans espaces) sont interdits dans le username et fonctionnent parfaitement comme séparateurs.

Dernière modification par Wan (11-02-2012 15:58:36)

Hors ligne

Pied de page des forums