Page 1 sur 1

Récupérer page externe protégée par mot de passe

Posté : 19 déc. 2011, 10:59
par josse34
Bonjour.

Je sais à prés prés déjà récupérer des informations ciblés sur une page située sur un site externe avec la function PHP get_file mais cette page en question est protégée par mot de passe.
A noter que j'ai les pleins droits pour faire ceci et que je suis le gérant du système et je connais donc les mots de passe!

Quelque soit la page demandée, si la session est expirée, le serveur distant renvois vers la page d'accueil ou il est détaillé la zone de mot de passe :

Code : Tout sélectionner

<tr> <body> <script type="text/javascript"> <!-- checkFrameset(); --> </script> <table class="home-layout-table" id="Table1"> <tr> <td align="center" class="tdcol0"> <img src="image/accueil.gif" alt="Titre"> </td> <td class="tdcol1"> <table id="OvTbl" class="home-overview-table"> <tr class="evenrow"> <td class="tdcol0">Donnée1:</td> <td id="Donnée1" class="tdcol1">82,82</td> </tr> <tr class="oddrow"> <td class="tdcol0">Donnée2:</td> <td id="Donnée2" class="tdcol1">48,46</td> </tr> <tr class="evenrow"> <td class="tdcol0">Donnée3:</td> <td id="Donnée3" class="tdcol1">476,59</td> </tr> </table> <form action="login" target="mainFrame" method="post"> <table class="home-control-table" id="Table3"> <tr> <td class="tdcol0">Langue:</td> <td class="tdcol1" colspan="2"><select name="Language" size="1"> <option Value="cs">Čeština </option> <option Value="de">Deutsch </option> <option Value="en">English </option> <option Value="es">Español </option> <option Value="fr" selected>Français </option> <option Value="it">Italiano </option> <option Value="nl">Nederlands </option> <option Value="pt">Português </option> <option Value="el">Ελληνικά </option> <option Value="ko">한국어 </option> </select> </td> </tr> <tr> <td height="5px"></td> </tr> <tr> <td class="tdcol0">Mot de passe:</td> <td class="tdcol1"><input name="Password" class="input-text" type="password" size="32"></td> </tr> <tr> <td></td> <td class="buttonrow"><input name="ButtonLogin" Value="Connexion" class="input-submit" type="submit" size="9"></td> </tr> <tr> <td class="messagerow" colspan="2"></td> </tr> </table> </form> </td> </tr> </table> </body>

Mettons que le mot de passe soit 123456, comment faire pour passer en PHP cette épreuve?
Par ailleurs, une fois loggé, je souhaiterais aller directement aller sur une page spéciale appelé TEST.html plutôt que d'afficher la lourde page de démarrage (disons après logging, une redirection 1 seconde après.
La difficulté est de différencier si on est loggé ou non afin d’éviter des scripts non optimisé, quoique si on demande TEST.html et que l'on est redirigé vers index.html, c'est qu'il faut se logguer!

Je vous remercie beaucoup pour votre aide et vous souhaite une bonne journée.

Merci
Bye

Re: Récupérer page externe protégée par mot de passe

Posté : 19 déc. 2011, 11:05
par xTG
Il faut passer par cUrl si tu veux pouvoir identifier un utilisateur puis récupérer une page protégée.
Cela permet en quelque sorte de naviguer sur un site web à partir d'un script serveur.

http://fr.php.net/curl

Re: Récupérer page externe protégée par mot de passe

Posté : 19 déc. 2011, 11:10
par josse34
Ouch!
Merci mais n'étant pas un professionnel je mets 5 semaines pour faire un code qui devrait prendre 5 minutes, un petit exemple appliqué me serait vraiment de la plus grande aide!
Bye

Re: Récupérer page externe protégée par mot de passe

Posté : 19 déc. 2011, 11:13
par xTG
Il y a tout un tas d'exemples et de contributions dans la documentation. ;)
Par exemple ici : http://fr.php.net/manual/fr/function.curl-setopt.php

Re: Récupérer page externe protégée par mot de passe

Posté : 19 déc. 2011, 11:41
par popy
Ouch!
Merci mais n'étant pas un professionnel je mets 5 semaines pour faire un code qui devrait prendre 5 minutes, un petit exemple appliqué me serait vraiment de la plus grande aide!
Bye
Parce que ça fait "professionnel" de demander un travail prémaché ?

Re: Récupérer page externe protégée par mot de passe

Posté : 23 déc. 2011, 23:38
par josse34
Bonjour!

Merci Popy pour ta si précieuse contribution!

Je suis débutant et peut être pas bien doué mais je ne parviens pas à passer cette barrière avec CURL! Les redirections ou mes codes m'amenes toujours vers une erreur 404.

Pourriez vous m'aider a créer ce code?? A préciser que ce n'est absolument pas pour des motifs lucratifs.

Je mets à disposition l’accès au serveur en question pour le week-end, l'adresse est 82 point 240 point 3 point 212 et le mot de passe est 1234.

Aucun risque pour la sécurité, ce serveur ne gère rien, le mot de passe est niveau utilisateur et il suffit d'appuyer sur le bouton reset pour effacer toute configuration.

Grand Grand merci pour votre aide!
Bonnes fetes!
Bye

Re: Récupérer page externe protégée par mot de passe

Posté : 24 déc. 2011, 11:08
par xTG
Montres nous ton code avec Curl qu'on puisse t'aider.

Re: Récupérer page externe protégée par mot de passe

Posté : 24 déc. 2011, 11:15
par josse34
Merci XTG!
Oh je n'ai rien inventé! C'est le résultat de mes recherches mais voici celui qui offre le plus de résultat :

Code : Tout sélectionner

<?php // Création d'une nouvelle ressource cURL $ch = curl_init(); // Données à envoyer $post = "1234"; $ch = curl_init('http://82.240.3.212/index.html'); // On effectue la requête avec cURL curl_setopt($ch, CURLOPT_NOBODY, TRUE); curl_setopt($ch, CURLOPT_FOLLOWLOCATION, false); curl_setopt($ch, CURLOPT_POST, TRUE); curl_setopt ($ch, CURLOPT_SSL_VERIFYHOST, 0); curl_setopt ($ch, CURLOPT_SSL_VERIFYPEER, 0); $ret = curl_exec($ch); // Configuration de l'URL et d'autres options curl_setopt($ch, CURLOPT_URL, "http://82.240.3.212/home_frameset.htm"); curl_setopt ($ch, CURLOPT_SSL_VERIFYHOST, 0); curl_setopt ($ch, CURLOPT_SSL_VERIFYPEER, 0); curl_setopt($ch, CURLOPT_POSTFIELDS, $post); curl_setopt($ch, CURLOPT_HEADER, 0); // Récupération de l'URL et affichage sur le naviguateur $output = curl_exec($ch); // Fermeture de la session cURL curl_close($ch); print_r($output); ?>
Et voici ce que cela affiche :
100 Server: Cache-Control: Date: Wed, 11 Apr 2001 21:22:45 GMT Connection: keep-alive Keep-Alive: 300 HTTP/1.1 200 Server: NOM SERVER Cache-Control: no-store, no-cache, max-age=0 Date: Wed, 11 Apr 2001 21:22:45 GMT Pragma: no-cache Connection: keep-alive Keep-Alive: 300 ETag: Wednesday, April 11, 2001 Last-Modified: Wed, 11 Apr 2001 09:20:37 GMT Content-Type: text/html Content-Length: 678 1?>
Tout mes autres codes finissent par une erreur 404

Une idée?
Le serveur est toujours dispo via http://82.240.3.212/

Mille merci!

Re: Récupérer page externe protégée par mot de passe

Posté : 24 déc. 2011, 11:48
par xTG
Ton $post est incorrect. Il faut que cela soit l'équivalent du tableau $_POST.
$post = array('nomChamp' => 'valeur');
Ensuite la validation du formulaire n'est pas sur la page index.html, si tu regardes bien ce sont des frames et la validation du formulaire semble se faire sur cette page : http://82.240.3.212/login
Donc c'est sur cette dernière que tu dois envoyer les données POST.

Re: Récupérer page externe protégée par mot de passe

Posté : 24 déc. 2011, 12:35
par josse34
Merci mais je n'y parviens pas.

L'index indique :
<frame src="top.htm" name="topFrame"
<frame src="home_frameset.htm" name="mainFrame"
<frame src="bottom.htm" name="bottomFrame"
Lorsqu'on regarde le code source du formulaire qui est situé sur mainFrame c'est :
<form action="login" target="mainFrame" method="post">
<td class="tdcol0">Mot de passe:</td>
<td class="tdcol1"><input name="Password" class="input-text" type="password" size="32"></td>
<td class="buttonrow"><input name="ButtonLogin" Value="Connexion" class="input-submit" type="submit" size="9"></td>
Ainsi, la cible du login est mainFrame soit http://82.240.3.212/home_frameset.htm
Le nom du champs mot de passe est Password
Une fois identifié, je souhaite aller sur http://82.240.3.212/plant_devices_treefrm.htm

Ainsi, en toute logique soit je vise directement home_frameset.htm et je refuse les transfert dans mon curl, soit je vise index et je spécifie que le post doit se faire dans le mainFrame.

Voici mon code qui renvois vers une erreur 404 :

Code : Tout sélectionner

$post = array('Password' => '1234'); $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, "http://82.240.3.212/home_frameset.htm"); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_FOLLOWLOCATION, false); curl_setopt($ch, CURLOPT_POST, TRUE); curl_setopt ($ch, CURLOPT_AUTOREFERER, TRUE); curl_setopt($ch, CURLOPT_POSTFIELDS, $post); curl_exec($ch); curl_close($ch); $ch2 = curl_init(); $ch2 = curl_init(); curl_setopt($ch2, CURLOPT_URL, "http://82.240.3.212/plant_devices_treefrm.htm"); curl_setopt($ch2, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch2, CURLOPT_FOLLOWLOCATION, false); $output = curl_exec($ch2); curl_close($ch2); print_r($output);

Le soucis etant que cela ne concerne que mon serveur, si je vise Google avec ce code, cela affiche la page, contriarement à mon serveur qui renvoi vers une erreur 404 :

Code : Tout sélectionner

$ch = curl_init(); curl_setopt($ch, CURLOPT_URL, "http://82.240.3.212/home_frameset.htm"); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 0); curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 0); $output = curl_exec($ch); curl_close($ch); print_r($output);
Ce code doit m'en empecher dans mainFrame:

Code : Tout sélectionner

<script type="text/javascript"> <!-- function checkFrameset() { if(self.parent.name != "mainFrame") { top.location = "index.html"; } } --> </script> </head> <body> <script type="text/javascript"> <!-- checkFrameset(); --> </script>

Re: Récupérer page externe protégée par mot de passe

Posté : 24 déc. 2011, 12:45
par xTG
Arf oui joliment méchant ce script JS...
Je dois bien avouer que là utiliser Curl pour naviguer à travers des frames je ne sais pas si c'est possible... J'en doute même fortement !

Sinon pour l'url de validation du formulaire tu es dans le faux.
L'attribut target défini dans quel cadre la requête doit être envoyée, dans ton cas elle se fait dans la frame "mainFrame".
L'attribut action défini l'url de la page qui doit être appelée, donc c'est bien la page login qui est chargée dans la frame.

Re: Récupérer page externe protégée par mot de passe

Posté : 24 déc. 2011, 12:58
par josse34
Comment faire alors?
Peu importe la manière en PHP du moment que je puisse y poster le mot de passe et accéder à la page protégée.
Je doute fortement que ce ne soit pas possible en PHP!

Re: Récupérer page externe protégée par mot de passe

Posté : 25 déc. 2011, 02:49
par josse34
Il dois bien exister un moyen de traiter avec PHP une page en inhibant la redirection comme le fait un view source : view-source:http://82.240.3.212/home.htm
Une fois le mot de passe inséré dans le champs "Password" sur le formulaire form action="login" target="mainFrame" (mainFrame étant home_frameset.htm contenant home_menue.htm et home.htm) method="post" de la page home.htm il doit être facile de passer cette protection pour des gens qui ont votre niveau de connaissance?!
Merci et joyeuses fêtes!