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

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

Marsh Posté le 03-03-2009 à 20:06:39    

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

Reply

Marsh Posté le 03-03-2009 à 20:06:39   

Reply

Marsh Posté le 03-03-2009 à 21:05:57    

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

Reply

Marsh Posté le 03-03-2009 à 21:18:47    

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

Reply

Marsh Posté le 04-03-2009 à 09:35:16    

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
Reply

Marsh Posté le 04-03-2009 à 09:43:44    

<?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
Reply

Marsh Posté le 04-03-2009 à 17:52:59    

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.

Reply

Marsh Posté le 04-03-2009 à 18:01:42    

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
Reply

Marsh Posté le 04-03-2009 à 18:05:23    

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
Reply

Marsh Posté le 04-03-2009 à 20:58:41    

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;
 
??

Reply

Marsh Posté le 04-03-2009 à 21:31:55    

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
Reply

Marsh Posté le 04-03-2009 à 21:31:55   

Reply

Marsh Posté le 05-03-2009 à 00:22:09    

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?

Reply

Marsh Posté le 05-03-2009 à 07:09:09    

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

Reply

Marsh Posté le 05-03-2009 à 10:08:27    

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.
Reply

Marsh Posté le 05-03-2009 à 10:28:57    

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
Reply

Marsh Posté le 05-03-2009 à 23:20:28    

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)

Reply

Marsh Posté le 06-03-2009 à 09:43:29    

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
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed