PHP|Débutant :: Forums

Advertisement

Besoin d'aide ? N'hésitez pas, mais respectez les règles

Vous n'êtes pas identifié(e).

#1 15-02-2010 10:31:28

dom1706
Membre
Inscription : 14-02-2010
Messages : 7

Emploi de cURL

Bonjour,

J'ai un petit script PHP qui permet de connaître le statut (connecté ou non) pour une application Skype en Flash.
Voici le script :

<?php
header("Content-type: text/xml; charset=utf-8");
echo ("skypeXML=" . file_get_contents($_GET["proxy_url"]));
?>

Mon hébergeur me dit que ce script n'est pas bon car, pour des raisons de sécurité, l'interprétation des URL comme étant des fichiers est désactivée, la fonction file_get_contents doit donc bien ouvrir un fichier local et non pas faire appel à une URL externe.
Il me conseille d'utiliser plutôt la fonction curl.
J'ai parcouru quelques tutoriels concernant cette fonction mais j'avoue être perdu ...

Que devrais-je faire dans ce petit script pour que n'apparaisse plus le problème de sécurité ?

Merci d'avance.
Dominique,

Hors ligne

#2 15-02-2010 12:08:58

xTG
GrandGourou
Inscription : 18-06-2009
Messages : 1 127
Site Web

Re : Emploi de cURL

Euh déjà vérifier ce qu'il y a dans la variable et être sûr qu'il n'y a que ce que tu souhaite.
Prenons pas exemple ton code étant dans une page nommée page.php
Que se passe-t-il si j'appelle la page comme ceci : http://tonsite.com/page.php?proxy_url=h … script.php

On ne sait pas ce qui pourrait se faire, mais n'importe qui pourrait faire ce qu'il veut justement...

Hors ligne

#3 15-02-2010 15:56:14

dom1706
Membre
Inscription : 14-02-2010
Messages : 7

Re : Emploi de cURL

Bonjour xTG,
C'est exactement ce que m'a dit mon hébergeur. Il m'a donné aussi un exemple (tout comme toi) de hacking.
Donc, je réitère ma question : comment utiliser curl dans ce script pour pouvoir faire appel à une URL externe.
La variable proxy_url ne contient pas de code malicieux, c'est simplement pour faire fonctionner une application Skype en Flash (qui permet de voir si l'interlocuteur est connecté ou non, de lancer une discussion ou un appel vocal Skype) depuis un site web.
Si vraiment, vous pressentez que cette variable peut être dangereuse, je peux demander à l'auteur ce que fait exactement proxy_url.
Dans le fichier fla, il n'y a pas d'appel ou d'accès à cette variable en tout cas.
Bien à vous et merci.
Dominique,

Hors ligne

#4 15-02-2010 15:57:36

xTG
GrandGourou
Inscription : 18-06-2009
Messages : 1 127
Site Web

Re : Emploi de cURL

Bah pour te répondre j'aurai besoin de savoir si l'url peut venir de tout et n'importe quoi ou si cela vient d'un domaine précis.
Si cela comporte le nom d'un fichier précis ou autre.

Hors ligne

#5 15-02-2010 17:21:39

dom1706
Membre
Inscription : 14-02-2010
Messages : 7

Re : Emploi de cURL

re bonjour xTG,

Voilà où intervient la variable proxy_url (dans la classe de l'application Flash) :
req.data = new URLVariables("proxy_url=http://mystatus.skype.com/" + skypeName + ".xml");
Il y a donc demande d'un fichier xml du serveur Skype.
On peut d'ailleurs essayer : http://mystatus.skype.com/mon_identifiant_skype.xml et on peut ainsi voir via cette URL si mon_identifiant_skype est connecté ou non ...
Visiblement, il n'y a rien de bien méchant dans cette variable proxy_url ;-)
Bien à toi.
Dominique,

Hors ligne

#6 15-02-2010 18:20:39

xTG
GrandGourou
Inscription : 18-06-2009
Messages : 1 127
Site Web

Re : Emploi de cURL

Dans ce cas vérifies que le nom de domaine dans la variable est bien http://mystatus.skype.com
Si ton hébergeur t'embête encore avec cela c'est qu'ils ne font vraiment confiance à personne...

Hors ligne

#7 16-02-2010 10:01:42

dom1706
Membre
Inscription : 14-02-2010
Messages : 7

Re : Emploi de cURL

Bonjour,

J'ai donc envoyé à mon hébergeur ce que contenait la variable proxy_url et il n'en démord pas, le bougre ;-)

C'est bien une URL externe, vous devez donc utiliser des fonctions prévuées pour l'accès externe comme les fonctions CURL et non pas les fonctions "fichiers".

On en est donc de nouveau au point de départ; je ne peux pas utiliser file_get_contents mais curl ... mais comment dans ce sript :

<?php
header("Content-type: text/xml; charset=utf-8");
echo ("skypeXML=" . file_get_contents($_GET["proxy_url"]));
?>

Merci d'avance.
Dominique,

Hors ligne

#8 16-02-2010 13:01:18

xTG
GrandGourou
Inscription : 18-06-2009
Messages : 1 127
Site Web

Re : Emploi de cURL

Il suffit de regarder dans la documentation qui possède de beaux exemples. ^^

Documentation avec exemple complet : curl-exec

Hors ligne

#9 16-02-2010 16:49:04

dom1706
Membre
Inscription : 14-02-2010
Messages : 7

Re : Emploi de cURL

Bonjour et merci encore xTG,

Le script PHP modifié :

<?php
header("Content-type: text/xml; charset=utf-8");
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, proxy_url);
curl_setopt($ch, CURLOPT_HEADER, 0);
echo ("skypeXML=" . curl_exec($ch]));
curl_close($ch);
?>

par apport à celui d'origine :

<?php
header("Content-type: text/xml; charset=utf-8");
echo ("skypeXML=" . file_get_contents($_GET["proxy_url"]));
?>

Malheureusement, le script modifié n'affiche rien de cohérent.

Où serait l'erreur ?
Merci d'avance.
Dominique,

Hors ligne

#10 16-02-2010 20:16:52

xTG
GrandGourou
Inscription : 18-06-2009
Messages : 1 127
Site Web

Re : Emploi de cURL

Qu'appelles-tu par rien de cohérent ? Des caractères bizarres ?
Peut être que la méthode du curl possède son propre jeu d'encodage de caractères et qu'il faut lui spécifier un dans une fonction pour ne pas avoir celui par défaut.

Hors ligne

#11 16-02-2010 20:32:06

dom1706
Membre
Inscription : 14-02-2010
Messages : 7

Re : Emploi de cURL

Bonsoir xTG,

Quand je dis que le script modifié n'affiche rien de cohérent, cela veut simplement dire que l'application Skype en Flash ne reconnait pas si je suis connecté ou non sur Skype ... il garde le statut 'online' même si je suis déconnecté. Il n'y a pas (apparemment) de souci d'encodage de caractères.
Je suis certain que sur un serveur qui accepte file_get_contents, l'application Flash fonctionne très bien.
Merci.

Hors ligne

#12 16-02-2010 21:04:38

xTG
GrandGourou
Inscription : 18-06-2009
Messages : 1 127
Site Web

Re : Emploi de cURL

Regardes plutôt alors s'il n'y a pas un cache ou un truc du genre avec cette méthode.

Par exemple dans la documentation j'ai trouvé cela qui fait un peu tilter :

curl_setopt() a écrit :

CURLOPT_COOKIESESSION       TRUE pour marquer ceci comme un nouveau cookie "session". Cela forcera libcurl à ignorer tous les cookies qui sont prêts à être chargés qui sont des "cookies de session" provenant des sessions antérieures. Par défaut, libcurl enregistre et charge toujours tous les cookies, indépendamment s'ils sont des cookies de session ou pas. Les cookies de session sont des cookies sans date d'expiration et existeront que pour cette "session" seulement.

CURLOPT_FORBID_REUSE       TRUE pour forcer la connexion à se fermer explicitement lorsque le processus est terminé et ne sera pas mise en cache pour être réutilisée.

CURLOPT_FRESH_CONNECT       TRUE pour forcer à utiliser une nouvelle connexion au lieu de celle en cache.

Dernière modification par xTG (16-02-2010 21:06:14)

Hors ligne

#13 16-02-2010 22:18:05

dom1706
Membre
Inscription : 14-02-2010
Messages : 7

Re : Emploi de cURL

Bonsoir xTG,

Voici le script avec ce que tu me soumets :

<?php
header("Content-type: text/xml; charset=utf-8");
$ch = curl_init();
curl_setopt($ch, CURLOPT_COOKIESESSION, 1);
curl_setopt($ch, CURLOPT_FORBID_REUSE, 1);      
curl_setopt($ch, CURLOPT_URL, "proxy_url");
curl_setopt($ch, CURLOPT_HEADER, false);
echo ("skypeXML=" . curl_exec($ch));
curl_close($ch);
?>

Mais, hélas, cela ne change rien ...
J'ai aussi changé la variable "proxy_url" en mettant le lien en dur http://mystatus.skype.com/mon_identifiant_skype.xml
mais cela ne change rien non plus. Plus fort, si je mets n'importe quoi à la place de "proxy_url" (exemple : proxyyy_url), le résultat est identique donc visiblement le script ne va même pas à la ligne curl_setopt($ch, CURLOPT_URL, "proxy_url");
Je dois bien reconnaître que je suis perdu !
<soupir>
Dominique,

Hors ligne

#14 16-02-2010 22:28:29

xTG
GrandGourou
Inscription : 18-06-2009
Messages : 1 127
Site Web

Re : Emploi de cURL

Essayes de mettre des messages de debug pour chaque instruction.

un if( !commande) echo 'message'; ou bien commande or die('message'); afin de cibler la commande qui bloque.

Hors ligne

Pied de page des forums