logo

NPDS : Gestion de contenu et de communauté


Content & Community Management System (CCMS) robuste, sécurisé, complet, performant, parlant vraiment français, libre (Open-Source) et gratuit.
43 visiteur(s) et 0 membre(s) en ligne.
Activité du Site

Pages vues depuis 25/05/2001 : 108 395 410

  • Nb. de membres 8 693
  • Nb. d'articles 1 695
  • Nb. de forums 26
  • Nb. de sujets 8
  • Nb. de critiques 92

Top 10  Statistiques

Index du forum »»  Le coin des codeurs »» permettre certains caractères spéciaux dans le login

permettre certains caractères spéciaux dans le login#25492

2Contributeur(s)
freuddeveloppeur
3 Modérateur(s)
developpeurjpbJireck
freud freudicon_post
Salut les codeurs,

Quelqu'un saurait-il comment autoriser certains caractères spéciaux dans l’identifiant (accents)?

Avant de me pencher sur le filtre du formulaire d'inscription, j'ai tenté la connexion après avoir modifié un login existant via l'édition des utilisateurs.
J'ai essayé de différentes manières, en dur comme en entité HTML mais rien à faire, et je ne sais pas ou ça coince.

Le login est bien retrouvé dans la BDD mais je suis redirigé vers la page d'accueil sans être loggé. Une manip à faire avant l'encodage et envoi du cookie peut-être (base_64_encode) puis à l'extraction ?

Connexion et génération du cookie dans user.php : login() docookie()
Extraction du cookie dans mainfile.php : cookiedecode()

Si quelqu'un a ne serait-ce qu'une piste, merci ;-)
++

Edit : Le cookie "user" n'est pas généré, quelque ce soit en entité HTML ou non, mais le programme pousse bien jusqu'à la fonction docookie() lors de la tentative de connexion. C'est setcookie() qui n'opère pas.

Edit 2 : J'ai poussé un peu plus mes investigations en remplaçant la variable de l'encodage par le code souhaité directement :

MzpmcmV1ZG9ubmU6ZmExZGY5NTUw... (issu d'un login terminant par un "e", ça passe)
MzpmcmV1ZG9ubuk6ZmExZGY5NTUw... (issu du même login avec "é" à la place du "e", ça ne passe pas)

Message édité par : freud / 06-05-2012 10:30

developpeur developpeuricon_post
filtrage dans user.php je dirais
freud freudicon_post
Re,

J'ai une parade mais à prendre avec précaution, en clair ne pas l'appliquer n'ayant pas encore jaugé les incidences possibles sur certaines fonctions.

L'idée consiste à remplacer avant encodage les caractères spéciaux acceptés par le caractère non accentué correspondant, exemple avec le "e" :


function docookie($setuid, $setuname, $setpass, $setstorynum, $setublockon) {

$caract = array('é', 'è', 'ê', 'ë');
$setuname = str_replace($caract, "e", $setuname);
$info = base_64_encode("$setuid:$setuname:".md5($setpass).":$setstorynum:$setublockon");

...



Ainsi le cookie comporte le login sans accent, et la connexion fonctionne qu'on le saisisse avec ou sans accent.
Ceci étant, le login enregistré dans la BDD et celui du cookie peuvent donc différer, auquel cas si certaines fonctions d'NPDS comparent ces derniers pour une raison ou pour une autre ils ne seront évidemment pas reconnus comme étant identiques. Dès lors ça va coincer.
Il convient donc de localiser les éventuelles fonctions concernées (modération ou que sais-je encore).

Puisque lors de l'inscription la recherche parmi les pseudos existants est insensible à la casse et aux accents ça ne pause pas de problème de sécurité, ainsi on ne pourra avoir un utilisateur qui se nomme "héhé" et un autre "hehe" ou encore "HeHe".
freud freudicon_post
Je vais devoir abandonner cette idée, ou tout au moins l'ajourner, devant l'ampleur de la tâche mais qui est propre à mon site.
Je pense que dans une version native de NPDS c'est largement faisable.

J'ai opté pour l'url rewriting et le pseudos sont inclus dans les urls des profils, et de fait je dois supprimer les accents dans ces urls. Ca se fait assez bien en passant par une fonction.

Mais j'ai aussi et surtout une toute nouvelle messagerie privée, très orientée ajax avec jquery. Le pseudo est passé comme argument dans différentes fonctions et ces accents me posent pas mal de problèmes. J'aurai tout mon programme de messagerie (php et !javascript!) à éplucher de fond en comble et il est assez conséquent, pour ne pas dire que c'est une vraie usine à gaz...

Sinon comme je le disais sous une version standard de NPDS j'y suis parvenu assez facilement.
Créer une fonction dans mainfile.php pour supprimer les éventuels accents des pseudos, puis appeler cette fonction chaque fois que nécessaire, c'est à dire pas souvent. A priori seulement :

-dans la fonction docookie() de user.php
-dans la fonction get_moderator() de function.php

Pour autoriser les accents lors de l'inscription ça se passe dans la fonction userCheck() de user.php, en ajoutant dans le preg_match les caractères autorisés


//Avant
if ((!$uname) || ($uname=="") || (preg_match('#[^a-zA-Z0-9_-]#',$uname))) ...

//Après
if ((!$uname) || ($uname=="") || (preg_match('#[^a-zA-Z0-9_-éèêëà]#',$uname))) ...



Je n'en ai mis que quelques uns pour l'exemple, à vous de voir.

Message édité par : freud / 07-05-2012 14:53

developpeur developpeuricon_post
Merci quand même