Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
823 connectés 

  FORUM HardWare.fr
  Programmation
  PHP

  Simuler l'accès à une page web (après identification), possible ?

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Simuler l'accès à une page web (après identification), possible ?

n°1857257
gregm54
Posté le 03-03-2009 à 20:06:39  profilanswer
 

Bonjour,
 
Je recherche à faire quelque chose de simple (enfin, à l'écrit du moins) mais je ne sais pas si c'est possible.
 
Je m'explique : J'ai la possibilité chez mon hébergeur de programmer le lancement d'un script PHP (tous les lundis 8h par exemple).
J'aimerais que mon script simule l'arrivée d'un visiteur sur une page (avec l'IP du serveur du coup) mais il faut être identifié pour voire cette page ...
Y a il moyen de faire une sorte de redirection en incluant les mots de passe / nom d'utilisateur pour que le script charge simplement la page (après une identification).
 
Merci d'avance

mood
Publicité
Posté le 03-03-2009 à 20:06:39  profilanswer
 

n°1857279
tomsoft
Posté le 03-03-2009 à 21:05:57  profilanswer
 

si htaccess,
 
je crois que http://user:pass@lapage marche

n°1857283
gregm54
Posté le 03-03-2009 à 21:18:47  profilanswer
 

Oui mais c'est de l'identification classique genre de site ou tu vois rien sans être connecté : http://www.facebook.com/home.php ;)

n°1857366
rufo
Pas me confondre avec Lycos!
Posté le 04-03-2009 à 09:35:16  profilanswer
 

regardes du côté de la lib de tests unitaires et d'intégration SimpleTest. c'est capable de simuler un navigateur web et saisir des infos dans un formulaire.


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
n°1857368
fluminis
Posté le 04-03-2009 à 09:43:44  profilanswer
 

<?php  
$post_data = "userid=";  
$post_data .= $_POST['userid'];  
 
$curl = curl_init();  
 
curl_setopt($curl, CURLOPT_URL, "http://ww7.aitsafe.com/cf/addmulti.cfm" );  
curl_setopt($curl, CURLOPT_POST, 1);  
curl_setopt($curl, CURLOPT_POSTFIELDS, $post_data);  
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);  
$page = curl_exec($curl);  
curl_close($curl);  
 
print($page);  
?>


---------------
http://poemes.iceteapeche.com - http://www.simuland.net
n°1857621
gregm54
Posté le 04-03-2009 à 17:52:59  profilanswer
 

Merci Fluminis, je teste ca des que possible. Par contre, comment je fais si je ne connais pas la variable (userid dans ton exemple) et que le createur du site a mis autre chose genre "myuserid" ?
 
Je vais aussi me renseigner sur Simpletest
 
Dans l'attente de vos reponses et en vous remerciant deja.

n°1857633
rufo
Pas me confondre avec Lycos!
Posté le 04-03-2009 à 18:01:42  profilanswer
 

ben tu regardes le code source du formulaire d'authentification et tu repères le nom du champ qui contient le login et celui qui contient le mdp.


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
n°1857636
fluminis
Posté le 04-03-2009 à 18:05:23  profilanswer
 

plus tu regardes s'il y a des champs hidden qui pourraient etre la cachés quelque part et qui serviraient a quelque chose pour le site en question dans le processus de chargement (il se peut fortement qu'il n'y en ait pas)


---------------
http://poemes.iceteapeche.com - http://www.simuland.net
n°1857724
gregm54
Posté le 04-03-2009 à 20:58:41  profilanswer
 

Et ça marche avec tous les sites cette technique ?
 
Ah et quand on a deux variables... c'est bien :
 
$post_data = "email=moimoi";  
$post_data .= &pass=test;
 
??

n°1857736
gregm54
Posté le 04-03-2009 à 21:31:55  profilanswer
 

J'ai essayé avec SimpleTest !
 
J'explique clairement ce que je cherche à faire (pas très utile en soi mais bon, on fait ça pour le challenge^^) : Le but est d'actualiser (donc de simplement se connecter à la page d'une application Facebook) puis à la limite de cliquer sur un ou deux liens mais ça on s'en fiche. Mais avant, il faut bien sûr s'identifier... J'ai testé ceci mais comme il y a authentification, je ne crois pas que ça passe. Est-ce parce que l'hébergeur chez qui j'utilise SimpleTest ne veut pas stocker de cookies ? (OVH, 60gp) Simpletest ne peut-il pas simuler l'aquisition de cookies? Ou le problème viendrait-il d'ailleurs ??
 

Code :
  1. <?php
  2. require_once('autorun.php');
  3. require_once('web_tester.php');
  4. class LogInTest extends WebTestCase {
  5.         function testAuthentication() {
  6.         $this->get('http://apps.facebook.com/amis-a-vendre/');
  7.         $this->setField('email', 'test@test.fr');
  8.  $this->setField('pass', 'mypass');
  9.                 $this->clickSubmit("Connexion" );
  10.  $this->clickLink('Jean Dupond');
  11.  $this->clickLink('Acheter');
  12.  }
  13. }
  14. ?>


 
Dans tous les cas, ça bloque au niveau de l'auth car j'ai essayé de naviguer sur un site banal sans mot de passe et la visite avec l'IP du serveur d'OVH est bien prise en compte.
Et puis, je ne trouve rien dans la doc de Simpletest qui pourrait renvoyer la page pour l'afficher. Et éventuellement pour comprendre pourquoi ça ne connectes pas.
 
Merci pour votre aide.  :p


Message édité par gregm54 le 04-03-2009 à 21:36:29
mood
Publicité
Posté le 04-03-2009 à 21:31:55  profilanswer
 

n°1857787
Profil sup​primé
Posté le 05-03-2009 à 00:22:09  answer
 

salut,
 
l'utilisation de CURL te permet justement de générer un cookie
 
mais pour ce que tu veux en faire, je pense qu'il pourrait etre plus sage de regarder du coté de l'API facebook?

n°1857807
gregm54
Posté le 05-03-2009 à 07:09:09  profilanswer
 

quand j'essaye avec Curl, "Ovh" me renvoie une page blanche...

n°1857845
superbob56
Posté le 05-03-2009 à 10:08:27  profilanswer
 

gregm54 a écrit :

Et ça marche avec tous les sites cette technique ?
 
Ah et quand on a deux variables... c'est bien :
 
$post_data = "email=moimoi";  
$post_data .= &pass=test;
 
??


ça ne fonctionne pas sur les sites qui utilisent des jetons (un champ hidden renseigné dans la page de login qui doit être renvoyé dans les données POST)
Dans ce cas, la technique est d'accéder à la page de login, récupérer le jeton, puis poster la demande de connexion avec userid, passwd et jeton
ça ne fonctionne pas non plus avec les sites qui utilisent les informations 'intelligentes' comme l'image brouillée ou la question mathématique (ex: combien font 1 + 7 ?), dans ce cas, pas de solution simple ... mais il faut savoir que cette dernière technique n'est en général pas utilisées pour se loger à un site, c'est plus utilisé lors de la création d'un compte sur un site donc le risque est limité d'entrer dans ce dernier cas de figure
 


---------------
By bob.
n°1857858
rufo
Pas me confondre avec Lycos!
Posté le 05-03-2009 à 10:28:57  profilanswer
 

Voici un script pour tester mon formulaire d'authentification. Il a 2 champs pour saisir le login et le mdp, mais ensuite, j'ai du javascript qui prend les 2 infos et les met en md5 dans 2 champs cachés d'un autre formulaire invisible et c'est ce formulaire qui est envoyé au serveur. Ca devrait donc couvrir ton besoin.

Code :
  1. <?php
  2. class TestOfvform_login extends WebTestCase {
  3.  
  4.     private $_sUrlPage = '';
  5.  
  6.     function TestOfvform_login() {
  7.         $this->WebTestCase();
  8.     }
  9.  
  10.     function setUp() {
  11.         $this->_sUrlPage = $GLOBALS['TEST_ICARE_URL'];
  12.     }
  13.  
  14.     function tearDown() {
  15.  
  16.     }
  17.  
  18.     function testInitLoginPage() {
  19.         $this->get($this->_sUrlPage);
  20.  
  21.         // Test n°1 : le champ sLogin doit être vide
  22.         $this->assertFieldById('sLogin', '', "A l'initialisation, le champ \"sLogin\" du formulaire d'authentification n'est pas vide!" );
  23.  
  24.         // Test n°2 : le champ sLogin doit être vide
  25.         $this->assertFieldById('sPassword', '', "A l'initialisation, le champ \"sPassword\" du formulaire d'authentification n'est pas vide!" );
  26.  
  27.         // Test n°3 : le champ hidEncLogin doit être vide
  28.         $this->assertFieldById('hidEncLogin', '', "A l'initialisation, le champ \"hidEncLogin\" du formulaire d'authentification crypté n'est pas vide!" );
  29.  
  30.         // Test n°4 : le champ hidEncLogin doit être vide
  31.         $this->assertFieldById('hidEncPassword', '', "A l'initialisation, le champ \"hidEncPassword\" du formulaire d'authentification crypté n'est pas vide!" );
  32.     }
  33.  
  34.     function testSubmitLoginPage() {
  35.         $this->get($this->_sUrlPage);
  36.  
  37.         // Test n°1 : authentification sans avoir saisi le login/mdp
  38.         $this->clickSubmitById('bSubmit');
  39.         $this->assertPattern('/<ul class="apperrors">/', "L'authentification sans identidiant/mot de passe ne fonctionne pas!" );
  40.  
  41.         // Test n°2 : authentification avec un compte n'existant pas
  42.         $this->post(
  43.                     $this->_sUrlPage,
  44.                     array(
  45.                           'hidEncLogin' => md5('toto'),
  46.                           'hidEncPassword' => md5('titi'),
  47.                           'action' => 'login',
  48.                           'bSubmit' => 'Valider'
  49.                          )
  50.                    );
  51.         $this->assertPattern('/<ul class="apperrors">/', "L'authentification avec un identidiant/mot de passe n'existant pas ne fonctionne pas!" );
  52.  
  53.         // Test n°3 : authentification avec le compte admin
  54.         $this->post(
  55.                     $this->_sUrlPage,
  56.                     $GLOBALS['TEST_AUTH_ADMIN']
  57.                    );
  58.  
  59.         // On vérifie qu'on est bien connecté
  60.         $this->assertPattern('/<ul id="mainmenu">/', "L'authentification avec un identidiant/mot de passe existant ne fonctionne pas!" );
  61.  
  62.         // On vérifie qu'on ets bien sur la page de sélection des calculateurs
  63.         $this->assertPattern('/<div id="page" class="listconfs">/', "La redirection sur \"listconfs\" après l'authentification ne fonctionne pas!" );
  64.     }
  65. }
  66. ?>


 
Ensuite voici un 2ième script qui teste la manipulation d'un page web affichant des configurations de machines (tableau triable paginé). La fonction setUp() effectue l'authentification avant de lancer les tests.

Code :
  1. <?php
  2. class TestOfvlistconfs extends WebTestCase {
  3.  
  4.     private $_sUrlPage = '';
  5.  
  6.     function TestOfvlistconfs() {
  7.         $this->WebTestCase();
  8.     }
  9.  
  10.     function setUp() {
  11.         $this->_sUrlPage = $GLOBALS['TEST_ICARE_URL'];
  12.  
  13.         // Authentification
  14.         $this->get($this->_sUrlPage);
  15.         $this->post(
  16.                     $this->_sUrlPage,
  17.                     $GLOBALS['TEST_AUTH_ADMIN']
  18.                    );
  19.     }
  20.  
  21.     function tearDown() {
  22.  
  23.     }
  24.  
  25.     function testInitPage() {
  26.         $this->get($this->_sUrlPage.'?action=listconfs');
  27.  
  28.         // Test n°1 : il doit y avoir 16 configurations trouvées
  29.         $this->assertPattern("/<p class=\"nbentriesfound\">Nb d'enregistrements trouvés : 16<\/p>/", "\"listconfs\" : il n'y a pas le bon nombre de configurations trouvées à l'initialisation de la page!" );
  30.  
  31.         // Test n°2 : il ne doit pas y avoir de mots-clés sélectionnés
  32.         $this->assertPattern("/<p>Mots-clés sélectionnés : <em>&nbsp;<\/em><\/p>/", "\"listconfs\" : il ne doit pas y avoir de mots-clés sélectionnés à l'initialisation de la page!" );
  33.     }
  34.  
  35.     function testSelectKeywords() {
  36.         // Test n°1 : sélection par un clic sur un mot-clé de l'arborescence
  37.         $this->get($this->_sUrlPage.'?action=listconfs&keywordid=5#sd5');
  38.         $this->assertPattern("/<p class=\"nbentriesfound\">Nb d'enregistrements trouvés : 9<\/p>/", "\"listconfs\" : il n'y a pas le bon nombre de configurations trouvées pour le mot-clé sélectionné \"CRNA-N\"!" );
  39.  
  40.         // Test n°2 : sélection par la saisie de mots-clés dans le champ texte
  41.         $this->setField('sSearchConf', 'CRNA-E');
  42.         $this->clickSubmitById('bSubmitListConfs');
  43.         $this->assertPattern("/<p class=\"nbentriesfound\">Nb d'enregistrements trouvés : 5<\/p>/", "\"listconfs\" : il n'y a pas le bon nombre de configurations trouvées pour le mot-clé saisi \"CRNA-E\"!" );
  44.  
  45.         // On vérifie que le champ texte est initialisé avec le mot-clé saisi précédemment
  46.         $this->assertPattern("/<input id=\"sSearchConf\" name=\"sSearchConf\" type=\"text\" size=\"25\" maxlength=\"100\" value=\"CRNA-E\"/", "\"listconfs\" : Le champ texte \"sSearchConf\" n'a pas été initialisé avec le mot-clé saisi!" );
  47.  
  48.         // On vérifie que les chemins des mot-clés sélectionnés sont affichés
  49.         $this->assertPattern("/<p>Mots-clés sélectionnés : <em>Tous-sites\/Tous-CRNA\/CRNA-E<\/em><\/p>/", "\"listconfs\" : le chemin du mot-clé saisi n'est pas affiché!" );
  50.     }
  51.  
  52.     function testOrderSelectedConfigurations() {
  53.         // On sélectionne les configurations du CRNA-E
  54.         $this->get($this->_sUrlPage.'?action=listconfs&keywordid=6#sd6');
  55.  
  56.         // Test n°1 : tri des configurations par leur version (ASC)
  57.         $this->post(
  58.                     $this->_sUrlPage,
  59.                     array(
  60.                           'hidOrderByField' => '2',
  61.                           'keywordid' => '6',
  62.                           'sSearchConf' => '',
  63.                           'action' => 'listconfs'
  64.                          )
  65.                    );
  66.  
  67.         // On vérifie que l'ordre des configurations du tableau est 2, 3, 4, 14, 9
  68.         $this->assertPattern("/<tbody>\D*action=viewconf&amp;confid=2[\D\d]*action=viewconf&amp;confid=3[\D\d]*action=viewconf&amp;confid=4[\D\d]*action=viewconf&amp;confid=14[\D\d]*action=viewconf&amp;confid=9/", "\"listconfs\" : le tri des configurations dans l'ordre croissant de leur version ne fonctionne pas!" );
  69.  
  70.         // Test n°2 : tri des configurations par leur version (DESC)
  71.         $this->post(
  72.                     $this->_sUrlPage,
  73.                     array(
  74.                           'hidOrderByField' => '-2',
  75.                           'keywordid' => '6',
  76.                           'sSearchConf' => '',
  77.                           'action' => 'listconfs'
  78.                          )
  79.                    );
  80.  
  81.         // On vérifie que l'ordre des configurations du tableau est 9, 14, 3, 4, 2
  82.         $this->assertPattern("/<tbody>\D*action=viewconf&amp;confid=9[\D\d]*action=viewconf&amp;confid=14[\D\d]*action=viewconf&amp;confid=3[\D\d]*action=viewconf&amp;confid=4[\D\d]*action=viewconf&amp;confid=2/", "\"listconfs\" : le tri des configurations dans l'ordre décroissant de leur version ne fonctionne pas!" );
  83.     }
  84.  
  85.     function testDisplaySelectedPageOfTable() {
  86.         // On sélectionne les configurations du tous-crna
  87.         $this->get($this->_sUrlPage.'?action=listconfs&keywordid=2#sd2');
  88.  
  89.         // On tri dans l'ordre des versions (ASC)
  90.         $this->post(
  91.                     $this->_sUrlPage,
  92.                     array(
  93.                           'hidOrderByField' => '2',
  94.                           'keywordid' => '2',
  95.                           'sSearchConf' => '',
  96.                           'action' => 'listconfs'
  97.                          )
  98.                    );
  99.  
  100.         // Test n°1 :
  101.         // la page 1 doit être affichée, le n°1 est sélectionné
  102.         $this->assertPattern("/<td class=\"page_n\">\D*&nbsp;<strong>1<\/strong>/", "\"listconfs\" : la sélection du n° de page 1 ne fonctionne pas!" );
  103.  
  104.         // le lien précédent ne doit pas être un lien, juste un libellé
  105.         $this->assertPattern("/<td class=\"prev\">\D*Précédent\D*<\/td>/", "\"listconfs\" : le lien \"Précédent\" ne doit pas être affiché quand la page n°1 est sélectionnée!" );
  106.  
  107.         // Test n°2 : on affiche la page suivante
  108.         $this->get($this->_sUrlPage.'?action=listconfs&keywordid=2&pg=2&nbrec=16&ob=2&sSearchConf=');
  109.  
  110.         // la page 2 doit être affichée, le n°2 est sélectionné
  111.         $this->assertPattern("/&nbsp;<strong>2<\/strong>\D*<\/td>/", "\"listconfs\" : la sélection du n° de page suivante (n°2) ne fonctionne pas!" );
  112.  
  113.         // le lien suivant ne doit pas être un lien, juste un libellé
  114.         $this->assertPattern("/<td class=\"next\">\D*Suivant\D*<\/td>/", "\"listconfs\" : le lien \"Suivant\" ne doit pas être affiché quand la dernière page est sélectionnée!" );
  115.  
  116.         // On vérifie que l'ordre de tri est conservé
  117.         $this->assertPattern("/<td class=\"prev\">\D*<a href=\"\?action=listconfs&amp;keywordid=2&amp;pg=1&amp;nbrec=16&amp;ob=2&amp;sSearchConf=\" title=\"Cliquer sur le lien pour afficher la page précédente.\">Précédent<\/a>\D*<\/td>\D*<td class=\"page_n\">\D*&nbsp;<a href=\"\?action=listconfs&amp;keywordid=2&amp;pg=1&amp;nbrec=16&amp;ob=2&amp;sSearchConf=\"/", "\"listconfs\" : l'ordre de tri n'est pas conservé lorsqu'on change de page!" );
  118.     }
  119.  
  120.     function testDisplayConfigurationState() {
  121.         // On sélectionne les configurations du tous-crna
  122.         $this->get($this->_sUrlPage.'?action=listconfs&keywordid=2#sd2');
  123.  
  124.         // On tri dans l'ordre des versions (DESC) pour avoir les confs en cours de construction et refusées sur la même page
  125.         $this->post(
  126.                     $this->_sUrlPage,
  127.                     array(
  128.                           'hidOrderByField' => '-2',
  129.                           'keywordid' => '2',
  130.                           'sSearchConf' => '',
  131.                           'action' => 'listconfs'
  132.                          )
  133.                    );
  134.  
  135.         // Test n°1 : on vérifie que les confs 15 et 16 sont en cours de construction
  136.         $this->assertPattern("/class=\"configurationbuilding\"\D*href=\"\?action=viewconf&amp;confid=16[\D\d]*class=\"configurationbuilding\"\D*href=\"\?action=viewconf&amp;confid=15/", "\"listconfs\" : l'affichage des configuations en cours de constuction ne fonctionne pas!" );
  137.  
  138.         // Test n°2 : on vérifie que la conf 11 est refusée
  139.         $this->assertPattern("/class=\"configurationrefused\"\D*href=\"\?action=viewconf&amp;confid=11/", "\"listconfs\" : l'affichage des configuations refusées ne fonctionne pas!" );
  140.     }
  141. }
  142. ?>
  143.  
  144. Précisions sur les 2 variables de conf :
  145. // Url de ICARE
  146. $TEST_ICARE_URL = 'http://localhost/Icare/src/index.php';
  147.  
  148. // Authentification Admin
  149. $TEST_AUTH_ADMIN = array(
  150.                          'hidEncLogin' => 'c335b2ac4ebd1f75f7fb9c13248ba624',
  151.                          'hidEncPassword' => 'c335b2ac4ebd1f75f7fb9c13248ba624',
  152.                          'action' => 'login',
  153.                          'bSubmit' => 'Valider'
  154.                         );


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
n°1858258
Profil sup​primé
Posté le 05-03-2009 à 23:20:28  answer
 

salut,
 
- heu, tu t'es amusé à lire le code HTML retourné suivant certains critères... le jour un le site spécifié change de présentation, ton paté est obsolète....bref, pas durable dans le temps et donne pas envie d'etre maintenu
- Tips pour ce que tu sembles vouloir faire : regarde du coté de l'extension Firefox Selenium IDE, j'ai comme l'impression que tu réinvente la roue
- Pour ton message "c'est tout blanc chez ovh", faut peut etre veiller a afficher les erreurs php déjà... (toujours désactivé par défaut en environnement de production)

n°1858368
rufo
Pas me confondre avec Lycos!
Posté le 06-03-2009 à 09:43:29  profilanswer
 

Pour info, les scripts donnés précédemment sont pour des tests d'intégration d'une appli web que je développe. Donc je maîtrise le code html produit.
Je connais Selenium. Par contre, je ne me souviens plus à l'époque pourquoi je l'avais écartée comme solution de TU/TI.


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

  Simuler l'accès à une page web (après identification), possible ?

 

Sujets relatifs
lire un fichier .txt sur une page HTMLlecture optique d'une page scannée
Accès sécuriséPHP cURL : simuler un bouton "Submit" / méthode POST
Insertion video flash en HTML[HTML/JAVA] Insertion code java dans une page HTML
migrer une base de données acces vers oracle2 charsets dans une meme page
Accès direct aux css en javascript ?afficher un nombre limité de produit par page
Plus de sujets relatifs à : Simuler l'accès à une page web (après identification), possible ?


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR