Aller au contenu
yaK2manD

Execution d'un script a distance et récupération des données

Noter ce sujet :

Recommended Posts

Bonjour,

J'ai un petit soucis.

J'ai un serveur chez ovh avec la base de données (serveur A) et un autre serveur sans base de données (serveur B).

Ce que je souhaiterais faire, c'est une identification sur le serveur B. C'est-à-dire que lorsque l'utilisateur arrive sur B, il remplit ses identifiants banalement et ensuite le script envoie les identifiants au A (sans que l'utilisateur ne le remarque évidemment) qui check dans la base de données et ce dernier renvoie les informations de l'utilisateur au B.

Je vous ai fais un petit dessin ;)

sanstitreuzj.png

J'ai fais pas mal de recherche sur le système de SSO car je me disais que c'était à peu près le comportement mais en fait non. J'ai également regardé du côté de cURL ...

Avez-vous une idée svp.

Merci

Partager ce message


Lien à poster
Partager sur d’autres sites

j'ai eu une image en tête en te lisant, mais ça sera extrêmement barbare !

effectuer depuis B un files_get_content d'une page de A, qui fais une verif en bdd et print ensuite sur la page les infos, séparés par un caractère quelconque (::: par exemple) pour en faire un array sur b via un explode().

c'est loin d'être optimisé et recommandé, mais ça fonctionne :P

(attention, codé en ultra vitesse, ne pas copier coller ou autre, fonctions peut être mal écrites, c'est juste pour l'exemple.)

A:


<?php
// données recues: $_POST[A] et $_POST[B]
$retour = files_get_content("http://mon_serveur_B:UN_PORT/getinfo.php?user=$_POST[A]&pass=$_POST[B]");

if($retour != "erreur") // voir B
{
$retour_array = explode(":::", $retour);
$mail = $retour_array[1];
$adresse = $retour_array[2];
// etc
}
?>

B


<?php
if(!empty($_GET[user]) && !empty($_GET[pass]))
{
// verif de la correspondance user / pass, on va appeller la verif "Z"
if(Z)
{
// on recupère les données avec un fetch et tout, on en fais un seul string sous forme aaa:::bbb:::ccc:::mail:::ip:::etc... qu'on stock dans $y et on l'imprime
echo $y;
}
else
{
echo "erreur"; // mdp différent de celui du compte
}

}
else
{
echo "erreur"; // incomplet, on refuse
}
?>

ou au pire, sur A, tu autorise un utilisateur en % histoire qu'il sache se connecter via le script php vers ton serveur B.

  • Vote 1

Partager ce message


Lien à poster
Partager sur d’autres sites

Oj, je comprends le principe. La fonction files_get_content execute en un premier temps cette page sur le serveur distant et reprend tout ce qui s'affiche ?

Par contre, la dernière phrase, je n'ai rien compris, mais alors pas du tout

sur A, tu autorise un utilisateur en % histoire qu'il sache se connecter via le script php vers ton serveur B

Merci

Modifié par yaK2manD

Partager ce message


Lien à poster
Partager sur d’autres sites

Oj, je comprends le principe. La fonction files_get_content execute en un premier temps cette page sur le serveur distant et reprend tout ce qui s'affiche ?

Exact. Si l'on précise une page internet, il va récupérer le code source de la page. Donc évidement, il ne faut mettre que du php, aucun <html> etc.

Par contre, la dernière phrase, je n'ai pas compris, mais alors pas du tout

Si votre base de donnée est en MySQL (je n'ai pas testé les autres), vous avez la possibilité de créer des utilisateurs. Ces utilisateurs ont une limite définissant de quel endroit ils peuvent se connecter. Par défaut, l'on met tout le temps "localhost". Mais, en mettant "%" signifiant "tout serveur", tu pourra te connecter de n'importe où; y compris d'un serveur distant. Donc, sur B, quand tu te connecte à mysql, suffit de marquer (exemple en mysql_*) : "mysql_connect("ton_ip_serveur_a", $user, $pass)".

Partager ce message


Lien à poster
Partager sur d’autres sites

Okay !!!

Je comprends. Cette méthode aurait été pas mal du tout mais OVH ne le permet pas sur des mutualisés.

Je vais donc utiliser la première.

Restreindre l'execution du script sur le serveur A par un htaccess, crypter toutes les données avec un algo perso. Ca éviterait partiellement de pouvoir pomper toutes les données.

Merci +1 !

Partager ce message


Lien à poster
Partager sur d’autres sites

Bonjour,

Si ton serveur A a l'extension PHP cURL, je te conseille fortement de l'utiliser. L'utilisation de files_get_content entre serveur peut laisser place à des failles de sécurité. De plus, tu peux passer plusieurs paramètres à cURL.

Pour ton exemple:


$url = 'http://mon_serveur_B:UN_PORT/getinfo.php?user=$_POST[A]&pass=$_POST[B]';

// Ouvre cURL
$ch = curl_init();


curl_setopt($ch,CURLOPT_URL,$url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); // par défaut, cURL affiche le résultat directement, mais on veut recevoir les données dans une variable à la place

//exécute la requête
$result = curl_exec($ch);

//ferme cURL il est très important de ne jamais oublier cette ligne car cURL est une extension de PHP et non une fonction de base, il est donc important de le fermer pour ne pas altérer les performances de ton script
curl_close($ch);

JoP

Modifié par JoP

Partager ce message


Lien à poster
Partager sur d’autres sites

Re,

cURL est la solution qu'il te faut. C'est très simple à mettre en oeuvre et cela fonctionne parfaitement avec le système que tu veux mettre en place.

Portekoi

Partager ce message


Lien à poster
Partager sur d’autres sites

Merci beaucoup.

Il est donc préferable d'utiliser curl plutot que file_get_contents lorsqu'on souhaite récupérer des informations d'une autre pas ?

Partager ce message


Lien à poster
Partager sur d’autres sites

Oui, tout à fait. curl est très bien pour se que tu veux faire.

Regarde sur Google, tu as pleins de tutos.

Partager ce message


Lien à poster
Partager sur d’autres sites

Créer un compte ou se connecter pour commenter

Vous devez être membre afin de pouvoir déposer un commentaire

Créer un compte

Créez un compte sur notre communauté. C’est facile !

Créer un nouveau compte

Se connecter

Vous avez déjà un compte ? Connectez-vous ici.

Connectez-vous maintenant

×