Sauvegarder utilisateurs (class JUser)

Réduire
X
 
  • Filtrer
  • Heure
  • Afficher
Tout effacer
nouveaux messages

  • [Problème] Sauvegarder utilisateurs (class JUser)

    Bonjour, je souhaite utiliser la classe JUser pour créer de nouveaux membres, j'en ai 498 à inserer.
    Je réussi à en insérer à peu prêt 300 mais pour une raison inconnu certains me génère cette erreur lorsque j'essaie de save
    Code:
    if (!$new_user->save())
    "Warning: sprintf(): Too few arguments in /Users/brendan/Desktop/root-www/fbnfrance/www2/libraries/joomla/methods.php on line 342"
    Cette erreur viendrai de la fonction sprintf appelé un moment par save.
    Je précise que les membres pour qui la save ne fonctionne pas n'ont pas de syntaxe particulière.

    Je vous indique le code que j'utilise pour l'ajout de membres
    Code:
    $data = array(
                    "name"=>$new_string,
                    "username"=>$user,
                    "email"=>$value[4],
                    "password"=>$password,
                    "registerDate"=>$date
                );
    $new_user = new JUser;
                    if (!$new_user->bind($data))
                    {
                        //throw new Exception("Could not bind data. Error: " . $new_user->getError());
                    }
                    if (!$new_user->save())
                    {
                        try
                        {
                            throw new Exception("Could not save user. Error: " . $new_user->getError());
                        }
                        catch (Exception $e)
                            {
                                echo 'Exception reçue : ',  $e->getMessage(), "\n";
                            }
                    }
    En vous remerciant par avance .

  • #2
    Re : Sauvegarder utilisateurs (class JUser)

    Bonjour

    Je pense au contraire qu'ils ont "quelque chose" de différents comme par exemple une apostrophe dans p.e. le $password ou dans $user ou encore $new_string.

    Il y a forcément une des variables que tu utilises qui fait que cela plante; reste à débuger laquelle.

    Remarque : ton code est-il à usage unique (tu le supprimes après) ou est-il appelé à être réutilisé car, dans ce second cas, tu risques d'avoir un problème critique de sécurité puisque tu ne vérifies pas ce que contient $data.

    Imagine que j'arrive à modifier ton code et que je parviens à mettre "groupid"=>20 (j'écris n'importe quoi) ==> je pourrais modifier l'appartenance du nouvel utilisateur et je le mets d'office dans le groupe des super admin et là, ton site est en attente d'injection léthale.

    Bonne journée.
    Christophe (cavo789)
    Mon blog, on y parle Docker, PHP, WSL, Markdown et plein d'autres choses : https://www.avonture.be
    Logiciel gratuit de scan antivirus : https://github.com/cavo789/aesecure_quickscan (plus de 45.000 virus détectés, 700.000 fichiers sur liste blanche)​

    Commentaire


    • #3
      Re : Sauvegarder utilisateurs (class JUser)

      Effectivement j'ai vérifié les valeurs de mes variables et les membres qui refusent de s'ajouter ont tous leurs nom en deux parties séparé par un espace dans $user.

      En ce qui concerne la faille de sécurité je suis débutant et je n'ai pas encore les réflexes de penser à cela j'essaie avant tout que ça marche mais je te remercie de m'en faire part, pourrais tu êtres plus précis sur la manière dont je devrais vérifier $data stp ?
      Merci
      Dernière édition par Goodsheep à 05/11/2014, 15h17

      Commentaire


      • #4
        Re : Sauvegarder utilisateurs (class JUser)

        Si tu lis l'anglais, intéresse-toi aux nombreux articles qui ont été publiés sur le net il y a quelques semaines concernant une faille critique dans le composant VirtueMart.

        Le truc : ce composant (comme d'autres) ont un code qui permet la création d'utilisateurs; *exactemement* comme tu le fais ci-dessus. L'appel à la fonction bind() permet de superposer ton array avec la structure de la table des utilisateurs. Superposer *comme si* tu étais dans un tableur : tu as accès à tout les champs de la table pour un record précis et tu écrases le contenu des champs par ceux de ton array.

        Si tu définis "name" dans le tableau, tu écrases le champ name par la valeur du tableau; toujours ce que tu fais.

        Tu peux inclure n'importe quel champs dans ton array et c'est là que c'est problématique : tu peux mettre des champs sensibles comme l'appartenance aux groupes Joomla et paf!, si je parviens à modifier la définition de ton tableau pour y mettre, "group_id"=20 (je présume du nom du champ et de la valeur); ton utilisateur créé est un super admin.

        Et si c'est un hack, ton site est mort.

        La fonction bind() n'a pas pour vocation de contrôler quelque chose, juste de juxtaposer ton array avec la table.

        Tu dois donc bannir certains champs dangeureux.

        Toujours dans l'hypothèse où ton code serait hacké.
        Christophe (cavo789)
        Mon blog, on y parle Docker, PHP, WSL, Markdown et plein d'autres choses : https://www.avonture.be
        Logiciel gratuit de scan antivirus : https://github.com/cavo789/aesecure_quickscan (plus de 45.000 virus détectés, 700.000 fichiers sur liste blanche)​

        Commentaire


        • #5
          Re : Sauvegarder utilisateurs (class JUser)

          Merci c'est très clair ! Même si dans le cadre de mon composant je ne pense pas avoir ce soucis (car c'est un composant déstiné au backoffice uniquement !) J'essayerai d'y penser à l'avenir.
          Merci d'avoir pris le temps et à bientôt .

          Commentaire


          • #6
            Re : Sauvegarder utilisateurs (class JUser)

            Permets-moi d'insister : ton composant est sécurisé ? Ton backoffice est sécurisé ?

            Si ton code n'est pas utile sur ton site, mets-le en commentaire.
            Christophe (cavo789)
            Mon blog, on y parle Docker, PHP, WSL, Markdown et plein d'autres choses : https://www.avonture.be
            Logiciel gratuit de scan antivirus : https://github.com/cavo789/aesecure_quickscan (plus de 45.000 virus détectés, 700.000 fichiers sur liste blanche)​

            Commentaire

            Annonce

            Réduire
            Aucune annonce pour le moment.

            Partenaire de l'association

            Réduire

            Hébergeur Web PlanetHoster
            Travaille ...
            X