Post d'un password avec Pear

yoanpg Messages postés 156 Date d'inscription dimanche 15 février 2009 Statut Membre Dernière intervention 20 janvier 2024 - 15 mai 2014 à 09:35
beschtraffer Messages postés 16 Date d'inscription dimanche 11 mars 2007 Statut Membre Dernière intervention 22 mai 2014 - 22 mai 2014 à 13:54
Bonjour à tous, :)
Je voudrais faire une page PHP pour me connecter automatiquement à mon compte Google. Je pensais utiliser PHP Pear avec la méthode post :
require_once "pear/Client.php";
$client=&new HTTP_Client();

$response_code=$client->post( "https://accounts.google.com/ServiceLogin?service=mail&passive=true&rm=false&continue=https://mail.google.com/mail/?tab%3Dwm&scc=1<mpl=default<mplcache=2&emr=1" , array("Email" => "login", "Passwd" => "motdepasse") );

$response=$client->currentResponse();

echo $response['body']


Mais j'ai l'impression que le champs mot de passe (qui est de type password) n'est pas complété. Est-ce une limitation de Pear, une protection, ou est-ce moi qui est fait une erreur ?

Merci d'avance de votre réponse :)

7 réponses

beschtraffer Messages postés 16 Date d'inscription dimanche 11 mars 2007 Statut Membre Dernière intervention 22 mai 2014 23
15 mai 2014 à 17:43
Bonjour,

La doc de Pear donne ceci comme syntaxe pour post:
integer HTTP_Client::post ( string $url , mixed $data , boolean $preEncoded = false , array $files = array() )

Vous pouvez donc essayer plusieurs choses:
- séparer l'url et les data en deux chaines
- mettre email et mot de passe directement dans les data
la structure array à la fin est faite pour contenir des fichiers, pas des données post.

Voici un exemple:
$pwd="motdepasse";
$login="email";
$response_code=$client->post( "https://accounts.google.com/ServiceLogin","service=mail&passive=true&rm=false&continue=https://mail.google.com/mail/?tab%3Dwm&scc=1<mpl=default<mplcache=2&emr=1&Email=$login&Passwd=$pwd" )


En espérant avoir aidé :)

--
0
yoanpg Messages postés 156 Date d'inscription dimanche 15 février 2009 Statut Membre Dernière intervention 20 janvier 2024 3
15 mai 2014 à 19:45
Merci beschtraffer, mais ça ne marche pas :(

Dans mon code précédent, les email et mot de passe sont passés dans les data déjà (pas fichier). D'ailleurs le login est correctement complété, mais pas le mot de passe :(
0
yoanpg Messages postés 156 Date d'inscription dimanche 15 février 2009 Statut Membre Dernière intervention 20 janvier 2024 3
Modifié par yoanpg le 16/05/2014 à 11:13
Je viens de faire l'essai avec une de mes pages persos qui contient un champs password, et ça marche !!

Est-ce que c'est pas Google qui a une protection particulière alors ? Mais je ne vois pas comment le mot de passe peut être envoyé autrement que par post.
Il y a pas une fonction Pear pour ce cas là ? J'ai vu une fonction appelée "Auth", a quoi sert-elle ?

Pour info le code source du formulaire de connexion de google:
<form novalidate method="post" action="https://accounts.google.com/ServiceLoginAuth" id="gaia_loginform">
  <input name="GALX" type="hidden"
           value="tqYGU2ugkkM">
  <input type="hidden" id="_utf8" name="_utf8" value="☃"/>
  <input type="hidden" name="bgresponse" id="bgresponse" value="js_disabled">
<label class="hidden-label" for="Email">Email</label>
<input id="Email" name="Email" type="email"
       placeholder="Email"
       value=""
       spellcheck="false"
       class="">
<label class="hidden-label" for="Passwd">Password</label>
<input id="Passwd" name="Passwd" type="password"
       placeholder="Password"
       class="">
<input id="signIn" name="signIn" class="rc-button rc-button-submit" type="submit" value="Sign in">
  <input type="hidden" name="PersistentCookie" value="yes">
  <a id="link-forgot-passwd" href="https://accounts.google.com/RecoverAccount"
       
       >
  Need help?
  </a>
  </form>


Merci d'avance
0
beschtraffer Messages postés 16 Date d'inscription dimanche 11 mars 2007 Statut Membre Dernière intervention 22 mai 2014 23
Modifié par beschtraffer le 16/05/2014 à 11:09
Le champ GALX m'avait échappé à la première lecture. En fait, visiblement, gmail vérifie cette valeur (qui doit être une variable de session): https://groups.google.com/forum/#!topic/clipperz/IIYQWR5MhMo

Une possibilité est d'ouvrir d'abord la page de connexion pour récupérer ce code, et de le faire suivre ensuite dans les données POST (dans une même session) Mais ça ressemble fortement à une protection pour empêcher ce type de connexion justement.

Concernant la fonction Auth, cela permet de créer un système d'authentification, mais côté serveur (sur ton site).

J'ai cherché un peu sur le net, mais je ne vois pas trop de méthode claire pour faire ça. Après, si c'est juste pour envoyer, recevoir des mails il y a d'autres méthodes.

Désolé de ne pas être d'un grand secours, par contre, si tu trouves une solution, ça peut être interessant.

Bon courage

PS: si c'est ton vrai mail qui apparait dans la source, cache le, c'est plus prudent
0
yoanpg Messages postés 156 Date d'inscription dimanche 15 février 2009 Statut Membre Dernière intervention 20 janvier 2024 3
16 mai 2014 à 14:22
En effet je n'avais pas vu ce champs caché ! J'ai honte !

Pour tester, je définit manuellement dans le post ce champs avec celui que je trouve dans le code source :
$response_code=$client->post( "https://accounts.google.com/ServiceLogin" , array("GALX" => "lecoderecupéré", "Email" => "login", "Passwd" => "motdepasse") );


Je lance ma page, et l'obtiens une page Google :
Oops! Your browser seems to have cookies disabled. Make sure cookies are enabled or try opening a new browser window.

Je ne vois pas comment faire pour charger d'abord la page de login, récupérer ce code (il me semble qu'il doit falloir du javascript pour ça) et ensuite envoyer la requette Pear post. Comment s'y prendre ??
0
yoanpg Messages postés 156 Date d'inscription dimanche 15 février 2009 Statut Membre Dernière intervention 20 janvier 2024 3
16 mai 2014 à 15:14
Si je charge la page https://accounts.google.com/ServiceLoginAuth, le GALX reste le même et correspond à celui contenu dans mes cookies.

Par contre à chaque chargement de ma page contenant perso, le GALX change à chaque fois. Il doit donc y avoir un problème de session et/ou de cookies.

Des idées ??
0
beschtraffer Messages postés 16 Date d'inscription dimanche 11 mars 2007 Statut Membre Dernière intervention 22 mai 2014 23
19 mai 2014 à 09:43
Chez moi je ne vois pas de cookie GALX, mais c'est certainement une question de config...
Peut être faut il le créer des cookies pour satisfaire Mr Google. C'est possible avec pear:
http://pear.php.net/manual/en/package.http.http-request.cookie.php

Chez moi je vois 2 cookies pour le domaine .google.com (serviceloginauth), et 4 pour le domaine .youtube. En créant ces 6 cookies, est-ce que ça marche?
0
beschtraffer Messages postés 16 Date d'inscription dimanche 11 mars 2007 Statut Membre Dernière intervention 22 mai 2014 23
19 mai 2014 à 09:44
La valeur de GALX doit être "hashée" puis comparée à la valeur dans un des cookies, du coup, en créant les cookies correspondants, ça doit le faire...
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
yoanpg Messages postés 156 Date d'inscription dimanche 15 février 2009 Statut Membre Dernière intervention 20 janvier 2024 3
19 mai 2014 à 12:58
Le cookie GALX je l'ai pour l'hôte "accounts.google.com"

J'ai écris ça :
require_once "pear/HTTP/Request.php";
require_once "pear/Client.php";

$client_cookie =& new HTTP_Request("http://mon_serveur.net");

$client_cookie->addCookie("GALX", "lecodebizarreGmail");
$response_cookie = $client_cookie->sendRequest();

$client_post=&new HTTP_Client();

$response_post_code=$client_post->post( "https://accounts.google.com/ServiceLoginAuth",array("GALX" => "lecodebizarreGmail", "Email" => "mail@gmail.com", "Passwd" => "password") );
$response_post=$client_post->currentResponse();

echo $response_post['body']


Le résultat est toujours le même "Oops! Your browser seems to have cookies disabled. Make sure cookies are enabled or try opening a new browser window.". :(
En plus, si je vais voir la liste des cookies, je ne vois pas le cookies GALX créé.

J'ai essayé en créant un cookie sans Pear :
require_once "pear/Client.php";
setcookie('GALX', 'lecodebizarreGmail', time() + 365*24*3600);

$client_post=&new HTTP_Client();

$response_post_code=$client_post->post( "https://accounts.google.com/ServiceLoginAuth",array("GALX" => "lecodebizarreGmail", "Email" => "mail@gmail.com", "Passwd" => "password") );
$response_post=$client_post->currentResponse();

echo $response_post['body']


Le résultat est toujours le même :( :(

Ai-je oublié quelque chose ?
Je me pose également une question : le cookies, il faut que je le crée sur mon serveur ?
De plus, que veux-tu dire par "La valeur de GALX doit être hashée" ?

Merci d'avance de ton aide :)
0
mpmp93 Messages postés 6652 Date d'inscription mercredi 13 avril 2011 Statut Membre Dernière intervention 28 septembre 2015 4
19 mai 2014 à 16:54
Bonjour,

Si j'ai bien compris, vous voudriez injecter les données compte et password vers Google depuis le serveur?

Mais alors, l'utilisateur qui n'a pas initié la connexion ne sera pas identifié, car GOOGLE vérifie l'authentification depuis le poste utilisateur.... qui n'a pas posté les données, puisque c'est le serveur qui les a envoyé.

Pour que le serveur garde la connexion, il faudrait que le serveur mémorise les cookies, ce dont je doute. Ce sont des mécanismes propres aux navigateurs et coté client final....

La seule solution, pour que ça marche coté client, est de pré-remplir un formulaire avec les données compte et password, mais alors là il y aura un vrai risque de sécurité!

Si vous voulez partager des ressources GOOGLE, il vaut mieux passer par les APIs GOOGLE dont beaucoup fonctionnent via des Services Web (Calendar par exemple) ou IMAP (pour la messagerie)...

Puisque vous avez un serveur, au lieu de vous concentrer sur Google, vous avez aussi vite fait de monter certaines ressources directement sur votre serveur:
- webdav pour le partage de documents
- web mail pour une gestion de messagerie locale

Si vous ne voulez pas monter ces ressources sur votre serveur, le mieux est de créer un compte GOOGLE collectif, par exemple monAsso.Cycles.Aude@gmail.com et de donner les login et mot de passe à tous les membres du groupe.... Changez régulièrement le mot de passe... Ainsi, vous n'aurez rien à développer coté serveur et vous gardez votre mail perso étanche.
0
yoanpg Messages postés 156 Date d'inscription dimanche 15 février 2009 Statut Membre Dernière intervention 20 janvier 2024 3
22 mai 2014 à 12:27
mpmp93, merci pour ces infos. Je vais analyser ça mais j'ai pas envie d'y passer trop de temps :s

beschtraffer, pas d'infos supplémentaire par rapport à mon dernier post ?
0
beschtraffer Messages postés 16 Date d'inscription dimanche 11 mars 2007 Statut Membre Dernière intervention 22 mai 2014 23
22 mai 2014 à 13:54
Désolé, j'ai des problèmes de temps :)
Je n'ai pas pu vraiment regarder en détail, ou faire des vrais tests..

En fait, il y a plusieurs cookies à créer... Il faut créer tout ceux du domaine google et youtube.. C'est un peu fastidieux, mais c'est la seule solution pour savoir si ça vient de là ;) Et visiblement c'est le cas.
Si le serveur croit que les cookies ne sont pas acceptés:
- soit il ne trouve pas un cookie (dans ce cas il faut le créer)
- soit il n'arrive pas à en créer un (et la, il faut le récupérer dans $_COOKIE et le faire suivre pour la prochaine requete)

J'espère que tu vas t'en sortir :)
0
Rejoignez-nous