IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Bibliothèques et frameworks PHP Discussion :

POST avec redirection avec CURL


Sujet :

Bibliothèques et frameworks PHP

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    107
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 107
    Points : 73
    Points
    73
    Par défaut POST avec redirection avec CURL
    Bonjour à tous,

    Je souhaite faire une requête post avec curl mais quelques points obscures font que rien ne marche au final....

    Voilà en fait j'ai un script, disons scriptlink.php, qui fait le post curl :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    $res = curl_init();
     
    curl_setopt($res, CURLOPT_URL, "http://www.site.machin/page-qui-doit-recevoir-donnees-post.php");
     
    curl_setopt($res, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($res, CURLOPT_HEADER, false);
    curl_setopt($res, CURLOPT_POST, true);
     
    curl_setopt($res, CURLOPT_POSTFIELDS, array('email'=>$email, 'passwd'=>$passwd));
     
    $output = curl_exec($res); 
    curl_close($res);
    J'ai pas tout pigé en fait : je m'attendais à être redirigé vers la page http://www.site.machin/page-qui-doit...nnees-post.php mais en fait je reste bloqué sur la page de mon script scriptlink.php.

    Ce que je souhaite : un script curl qui fasse une requête POST vers une page et qui redirige évidemment vers cette page (comme un post classique avec un formulaire quoi )

    Pourquoi je fais ça ? explications :

    j'ai deux sites : www.siteA.com et www.siteB.com. Sur les deux sites l'utilisateurs peut se logger avec un identifiant (email) et un mot de passe identiques car lorsuq'il crée un compte sur un site un compte est auotmaitiquement créé sur l'autre site également et donc avec les mêmes identifiant et mot de passe

    Si l'utilisateur se logue sur le siteA un fois connecté il doit pouvoir passer sur l'autre site mais sans se reconnecter (enfin tecniquement il y a connexion mais c'est transparent pour lui).

    Un formulaire avec des hidden contenant l'eamil et le passwd et renvoyant vers le siteB permet sans problème cela mais le problème est que le passwd et l'email sont inscrit en dure dans le code html de la page...

    Je passe donc par un script php qui n'affiche rien et qui va lire dans une base de donnée l'email et le mot de passe qui sont ensuite postés avec curl vers la page de destination (un script de login) sur le siteB qui se charge de faire le login donc.

    C'est transparent pour l'utilisateur qui n'a pas à se reconnecter pour passer d'un site à l'autre et je n'ai pas de formulaire html avec ecrit dedans l'email et le passwd => petite sécurité.

    Seulement voilà comme expliqué plus haut je ne passe pas sur ke script de destination => comment faire ? Est-ce possible ? peut-être je me trompe en pensant que curl puisse faire ce genre de chose ?

    Sinon si d'autre solutions sont possibles je suis preneur

  2. #2
    Modérateur
    Avatar de grunk
    Homme Profil pro
    Lead dév - Architecte
    Inscrit en
    Août 2003
    Messages
    6 692
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Lead dév - Architecte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2003
    Messages : 6 692
    Points : 20 243
    Points
    20 243
    Par défaut
    Curl ne fait que envoyer une requête HTTP et éventuellement récupérer la réponse , y'a pas de raison que tu sois redirigé où que ce soit.

    Au passage pas besoin de curl pour faire ce genre de chose :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    $postdata = http_build_query($mesdonnees);
     
    $opts = array('http' =>
        array(
            'method'  => 'POST',
            'header'  => 'Content-type: application/x-www-form-urlencoded',
            'content' => $postdata
        )
    );
     
    $context  = stream_context_create($opts);
    $result = file_get_contents('http://www.site.machin/page-qui-doit-recevoir-donnees-post.php', false, $context);

  3. #3
    Membre émérite
    Avatar de gene69
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 769
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 769
    Points : 2 446
    Points
    2 446
    Par défaut
    euuuh ça marchera pas.

    c'est pas parce que tu fais un post vers la page banquedefrance.fr en PHP que le visiteur sera redirigé vers la banque de france. ton visiteur a besoin d'un header(redirect) pour comprendre qu'il faut charger un nouveau document (et s'en aller...)


    si tu es connecté sur le site A, avec tes identifiants du site A, la session que tu auras seras associée au site A il me semble. Quand ton visiteur passera au site B il n'aura pas de session correspondant à cette URL et patatra (puisque l'identification aura été effectuée par le site A) il n'aura pas son identificateur de session puisqu'il n'aura pas encore visité le site B... pas d'identificateur de session = pas reconnu.


    Bon est ce qu'il es possible de mettre en commun des sessions entre deux serveurs ? je ne sais pas, peut-être que oui.
    Ou peut-etre il est possible de :
    se connecter sur le site A
    le site A s'identifie sur le site B
    le site A transfere les identifications du site B au visiteur du site A ( setcookies() )
    le visiteur utilise les sites A ou B indifférement.



    Personnelement l'employerai un algorythme standard comme OpenID http://openid.net/get-an-openid/, ce qui devrait même fonctionner avec facebook.

  4. #4
    Membre émérite
    Avatar de gene69
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 769
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 769
    Points : 2 446
    Points
    2 446
    Par défaut
    si tu identifies le post le mot de passe de ton utilisateur vers un autre site, par respect pour lui, utilise un protocole sécurisé ou un lien privé, pas un truc qu'on puisse pirater.

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    107
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 107
    Points : 73
    Points
    73
    Par défaut
    Oui c'est tres vrais ce que vous dites et justement :

    Il n'est pas question de faire passer une session du site A vers le site B d'ou ma solution : sachant qu'un utilisateur dans mon système a forcément le même login et le même mot de passe sur le site A et sur le site B, pour passer de l'un à l'autre tout en donnant l'impression à l'utilisateur qu'il passe de l'un à l'autre sans reconnexion, j'ai mis en place un formulaire avec deux champs masqués passwd et iddentifiant qui envoient vers le script de connexion de l'autre site qui teste ce passwd et cet identifiant et connecte l'utilisateur à la volée.

    Cela fonctionne très bien seulement les champs maqués passwd et iddentifiant apparaissent directement dans le code html de la page et sont donc directement accessibles ce qui me gêne...

    J'ai donc décidé de passer par un script php qui n'affiche rien (donc pas de code html contenant passwd et identifiant). Il lit dans la base le passwd et l'identif et utilise ces données pour faire une requete post avec curl vers le script de connexion de session du site B.

    Seulement comme le dit la seconde réponse curl ne redirige pas et ne fait qu'envoyer des données post.

    Ma question est donc la suivante : est-ce possible et comment avec curl puis-je poster via un script sans formulaire des données post (ca ça marche) et être redirgé vers la page du site b qui traite ces données comme le ferait un post normal avec un vrais formulaire.

    Selon la réponse 2 c'est impossible curl ne peu pas rediriger. Dans ce cas existe-t-il d'autres solutions pour obtenir cet effet ? => Envoyer des données POST vers une page d'un autre site en étant redirigé vers celle-ci comme le ferais un formulaire normal mais sans formulaire.

    edit suite a ta seconde reponse gene69 : le mot de passe est crypté c'est une première sécurité. Ensuite le fait que je ne veuille pas passer par un formulaire classique qui pourrait dévoiler ce passwd même crypté ne serais-ce qu'en affichant les sources de la page serait justement ma seconde sécurité

    Enfin les deux site m'appartiennent et sont sur le même serveur et utilisent la même base de donnée. C'est pas un monstre de sécurité mais le transfert des données via le post reste "dans la famille" si j'ose dire

    Par ailleurs le lien qui déclanche le post est un lien qui n'existe que dans l'espace connecté de l'utilisateur

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    107
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 107
    Points : 73
    Points
    73
    Par défaut
    Citation Envoyé par grunk Voir le message
    Curl ne fait que envoyer une requête HTTP et éventuellement récupérer la réponse , y'a pas de raison que tu sois redirigé où que ce soit.

    Au passage pas besoin de curl pour faire ce genre de chose :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    $postdata = http_build_query($mesdonnees);
     
    $opts = array('http' =>
        array(
            'method'  => 'POST',
            'header'  => 'Content-type: application/x-www-form-urlencoded',
            'content' => $postdata
        )
    );
     
    $context  = stream_context_create($opts);
    $result = file_get_contents('http://www.site.machin/page-qui-doit-recevoir-donnees-post.php', false, $context);

    Ce serait la solution... juste une question : quelle forme doit prendre $mesdonnees ? Un tableau ?

  7. #7
    Modérateur
    Avatar de grunk
    Homme Profil pro
    Lead dév - Architecte
    Inscrit en
    Août 2003
    Messages
    6 692
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Lead dév - Architecte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2003
    Messages : 6 692
    Points : 20 243
    Points
    20 243
    Par défaut
    Ce que tu ne semble pas comprendre , c'est que CURL ne fait qu'une simple requête HTTP , rien de plus.
    Donc tu peux bien faire un header('Location:monsite.com'); pour te rediriger , tu ne seras pas logué puisque CURL ne vas pas pouvoir gérer la session créer par la page à qui tu as envoyé des données.

    Bref la solution est d'utiliser une solution éprouvé comme le propose gen69 ou alors de trimballer des informations de connexion dans un cookie (comme un autologin en quelque sorte) mais c'est pas terrible niveau sécurité.

  8. #8
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    107
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 107
    Points : 73
    Points
    73
    Par défaut
    Citation Envoyé par grunk Voir le message
    Ce que tu ne semble pas comprendre , c'est que CURL ne fait qu'une simple requête HTTP , rien de plus.
    Donc tu peux bien faire un header('Location:monsite.com'); pour te rediriger , tu ne seras pas logué puisque CURL ne vas pas pouvoir gérer la session créer par la page à qui tu as envoyé des données.

    Bref la solution est d'utiliser une solution éprouvé comme le propose gen69 ou alors de trimballer des informations de connexion dans un cookie (comme un autologin en quelque sorte) mais c'est pas terrible niveau sécurité.
    Oui ça j'ai bien compris pour curl et donc justement existe-t-il une autre solution ?

    Si celle de Gene69 conviendrait serait-il possible de la détailler car j'avoue que la je nage un peu : ça à l'air d'être justement une solution en trimbalant un cookie ce que justement tu me dis d'éviter.

  9. #9
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    107
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 107
    Points : 73
    Points
    73
    Par défaut
    Au temps pour moi : la solution de gene69 c'est OpenID... C'était en bas de son post j'ai pris ça pour une signature

    Ca à l'air intéressant j'y jette un oeil

    Merci pour les réponses rapides en tout cas

  10. #10
    Modérateur
    Avatar de grunk
    Homme Profil pro
    Lead dév - Architecte
    Inscrit en
    Août 2003
    Messages
    6 692
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Lead dév - Architecte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2003
    Messages : 6 692
    Points : 20 243
    Points
    20 243
    Par défaut
    J'ai jamais implémenter openid , mais ce qui y'a de certains c'est que l'utilisateur sera obligé à un moment ou un autre d'autoriser le site à utiliser son identifiant openid.
    Donc la première connexion ne sera pas transparente.

    Il faudrait sans doute que tu fasses des recherches vers le Single Sign On qui permet justement une identification unique pour de multiple domaine.

    Une question sur le sujet : http://stackoverflow.com/questions/4...ltiple-domains

Discussions similaires

  1. Réponses: 9
    Dernier message: 21/06/2011, 19h30
  2. pb de redirection avec redirect
    Par FamiDoo dans le forum ASP.NET
    Réponses: 1
    Dernier message: 12/06/2007, 00h13
  3. pb redirection avec redirect
    Par FamiDoo dans le forum ASP.NET
    Réponses: 3
    Dernier message: 11/06/2007, 23h04
  4. [cURL] Redirection avec Curl: Une curiosité ?
    Par cybertj dans le forum Bibliothèques et frameworks
    Réponses: 2
    Dernier message: 27/11/2006, 21h20
  5. Redirection avec des paramètres en POST
    Par Kosti dans le forum Langage
    Réponses: 8
    Dernier message: 16/02/2006, 16h09

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo