API ajouter un membre depuis un module externe

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

  • [RÉGLÉ] API ajouter un membre depuis un module externe

    Bonjour,

    Aujourd'hui je suis face a un petit problème !

    J'ai un fichier qui a pour but d'enregistrer le nouveau membre dans la base de donnée de Joomla 3 depuis un module d'enregistrement externe (voir code ci-dessous). Le problème c'est que je n'arrive pas a envoyer des informations sur le code pour le tester ! J'ai fait un formulaire (code aussi ci-dessous) mais rien, aucune inscription dans la bdd.

    Avez vous une solution ? Où ai-je fais une erreur ? Merci de votre aide.

    Code:
    <?php
    
    // set flag
    define( '_JEXEC', 1 );
    define( '_VALID_MOS', 1 );
    define( 'JPATH_BASE', realpath(dirname(__FILE__).'/../../../../[nom de dossier]/'));
    require_once ( JPATH_BASE .'/includes/defines.php' );
    require_once ( JPATH_BASE .'/includes/framework.php' );
    require_once ( JPATH_BASE .'/libraries/joomla/factory.php' );
    
    // mainframe
    $mainframe =& JFactory::getApplication('site');
    $mainframe->initialise();
    
    // db connection
    //$db =& JFactory::getDBO();
    
    // récupération du user
    $user = &JFactory::getUser();
    
    // fonction add user
    function addJoomlaUser($name, $username, $password, $email) {
            $data = array(
                "name"=>$name,
                "username"=>$username,
                "password"=>$password,
                "password2"=>$password,
                "email"=>$email
            );
    
            $user = clone(JFactory::getUser());
            if(!$user->bind($data)) {
                throw new Exception("Could not bind data. Error: " . $user->getError());
            }
            if (!$user->save()) {
                throw new Exception("Could not save user. Error: " . $user->getError());
            }
    
            return $user->id;
    }
    
    // affichage des infos - phase de test
    if (!$user->guest) {
    echo 'You are logged in as:<br />';
    echo 'User name: ' . $user->username . '<br />';
    echo 'Real name: ' . $user->name . '<br />';
    echo 'User ID : ' . $user->id . '<br />';
    }
    else
    {
    echo("Vous n’êtes pas connecté");
    }
    
    ?>
    Code HTML:
    <html>
    <form method="POST" action="joomla336.php">
    <input type=hidden name=subject value=monadhesion>
    <br />
    <input name="username" type="text" SIZE="30"> <BR>
    <input name="name" type="text" SIZE="30"><BR>
    <input name="email" type="text" SIZE="30"> <BR>
    <input name="password" type="text" SIZE="30"> <BR>
    <br />
    <input type="SUBMIT" value="Validation">
    </form>
    </html>
    Cordialement,
    MisterPatatteuh
    Dernière édition par MisterPatatteuh à 02/02/2015, 11h31

  • #2
    Re : API ajouter un membre depuis un module externe

    Bonjour

    Premier truc, un détail :

    define( '_VALID_MOS', 1 ); ==> C'est requis ça ? Qui exploite cette constante ?

    Tu as vérifié que "JPATH_BASE" est bien correct ? Ta construction est hasardeuse...

    Tu définis addJoomlaUser() mais tu ne l'appelles jamais; ce code est juste non exécuté.

    Perso, je forcerais $data['group'] pour garantir le groupe de l'utilisateur et ne pas le laisser ainsi "par défaut" (lequel est-ce ? en lisant ton code, on n'en sait rien et cela pourrait varier d'un site à l'autre selon sa config.)

    Je présume que addJoomlaUser() est correct.

    Ci-dessous, de quel user parle-t-on ? Cette question parce qu'il s'agit de l'utilisateur "d'avant l'insertion (-non appelée-)", ton getUser().

    Code PHP:
    if (!$user->guest) { 
    Ton souci, premier, est donc le non appel de la fonction. Ensuite, perso, je vois plein de souci déjà évoqué ci-dessus mais, aussi, aucun captcha, aucun token, ... Si quelqu'un découvre ton script joomla336.php, je pense qu'il va pouvoir faire du dégat en spammant tant et plus ton site.

    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 : API ajouter un membre depuis un module externe

      Je relis ton code HTML : il est non valide (pas de header ni de body, pas de " pour les valeurs des attributs de input, ton formulaire n'est pas de type POST, ...

      Ton code PHP ne lit pas les données transmises et forcément, aucune protection en place pour garantir que les données sont sécurisées (cfr injections SQL)

      En quatre mots : il reste du boulot ;-)
      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


      • #4
        Re : API ajouter un membre depuis un module externe

        Bonjour a toi,

        Dans un premier temps un grand merci a toi pour ta réponse très complète et rapide.

        La dernière partie de mon code ( if (!$user->guest) ) est présente afin de tester que la connexion API est bien opérationnelle ! Elle ne sera pas dans le code final.

        Envoyé par cavo789 Voir le message
        Si quelqu'un découvre ton script joomla336.php, je pense qu'il va pouvoir faire du dégat en spammant tant et plus ton site.
        Le site est actuellement en local et le code sera intégré par la suite sur une application externe qui se chargera de l’exécuter et de donner un accès a la fonction seulement aux administrateurs.

        Pour le reste je m'occupe de mettre tout cela au propre. Vraiment merci pour ton aide.

        Cordialement,
        MisterPatatteuh.

        Commentaire


        • #5
          Re : API ajouter un membre depuis un module externe

          Envoyé par MisterPatatteuh Voir le message
          La dernière partie de mon code ( if (!$user->guest) ) est présente afin de tester que la connexion API est bien opérationnelle ! Elle ne sera pas dans le code final. .
          Pour être bien compris : addJoomlaUser() n'est pas appelé ==> ton user->guest n'est pas "ton nouvel utilisateur" mais celui qui aurait été connecté avant la soumission (peut-être toi).
          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