IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Web Perl Discussion :

Construction d'un Robot Web (HTTPS + Proxy + JS) ?!


Sujet :

Web Perl

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Mai 2003
    Messages
    921
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Consultant en Business Intelligence

    Informations forums :
    Inscription : Mai 2003
    Messages : 921
    Par défaut [Abandonné] Construction d'un Robot Web (HTTPS + Proxy + JS) ?!
    Bonjour à tous,

    je cherche à créer un Robot Web me permettant de me connecter à un site Internet gouvernemental en HTTPS à travers le Proxy (Webwasher) de l'entreprise où je suis.

    Je rassure tout le monde : j'ai l'autorisation de faire ça de la part du site Internet en question et bien évidemment c'est dans le cadre de mon travail !

    La connexion à ce fameux site en HTTPS via le Proxy ne pose plus de problèmeS, sic !

    Par contre, l'authentification me donne du fil à retordre !


    Voici comment cela fonctionne :
    - remplissage de 2 champs "login" et "pass" ;
    - clic sur le mot "Entrer" ;
    - chargement de la page résultat.


    Rien de bien extraordinaire me direz-vous ... sauf que ce formulaire ne possède pas de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <input type="submit" ... />
    et que l'attribut "action" de la balise <form> n'est pas présent !!!

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <form id="blablaLogin" name="blablaLogin" method="post" onsubmit="return false;">

    Comment tout cela peut-il bien fonctionner ?

    C'est assez simple : "login" et "pass" sont des <input /> classiques, mais "Entrer" est la valeur d'une simple balise <div> qui est surchargé par un CSS afin que la valeur de ce <div> soit cliquable !?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <div class="blabla_class" onmouseOver='HoverClass(this);' onmouseOut='HoverClass(this);' onclick="testlogin();" title="Cliquer pour entrer dans une session privée de blabla">Entrer</div>
    La valeur "Entrer", qui devient donc cliquable, appelle une fonction Javascript via un attribut onclick="testlogin();" de la balise <div> à laquelle elle appartient.

    La fonction "testlogin()" :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    function testlogin() {
     	var testok=true
    	if (document.getElementById("blablaLogin").login.value=="")
    		{alert("Vous devez donner un identifiant pour accéder à l'ensemble des ressources de blabla !! Merci");
    		testok=false;
    		}
    	else if (document.getElementById("blablaLogin").pass.value=="")
    		{alert("Vous devez donner un mot de passe pour accéder à l'ensemble des ressources de blabla !! Merci");
    		testok=false;
    		}
    	if (testok)
    		{envoyer();
    		}
    	else  {
    		document.getElementById("blablaLogin").login.focus();
    		}
    }		
     
    function envoyer() {
    	document.getElementById("blablaLogin").action = "/blablasession.asp";
    	document.getElementById("blablaLogin").target = "";
    	document.getElementById("blablaLogin").submit();
    }

    Grâce à cet #@''¤*µ ingénieux système ... je ne peux pas utiliser la méthode suivante nécessaire à la validation de mon formulaire :
    Je ne peux pas non plus passer directement en paramètres, via l'url, le "login" et "pass" à la page affectée à l'attribut "action" via le JS ... car on est en method="POST" :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    https://blabla.gouv.fr/blablasession.asp?login=mon_login&pass=mon_pass
    ... moi j'y croyais !!!


    Je pense que la solution serait que je commence par faire une connexion + authentification classique, mais au moment de la validation du formulaire : il faudrait que j'arrive à indiquer l'url de l'attribut "action" de la balise <form> associée à mon formulaire d'authentification ... suis-je claire ?


    Mon code actuel :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
        #!c:/perl/bin -w
        use strict; use warnings;
        use WWW::Mechanize;
        use Crypt::SSLeay;
        use HTML::TreeBuilder;
     
        my $m = WWW::Mechanize->new;
     
    		# PROXY SUPPORT
    		$ENV{HTTPS_PROXY} = 'http://proxy.mycompany.com:8080';
     
    		# PROXY_BASIC_AUTH
    		$ENV{HTTPS_PROXY_USERNAME} = 'mon_ident';
    		$ENV{HTTPS_PROXY_PASSWORD} = 'mon_mdp';
     
        # récupération des informations
        $m->agent_alias("Linux Mozilla");
        $m->get('https://blabla.gouv.fr/default.asp');
        exit unless $m->success;
     
        # remplissage et validation
        $m->set_fields(
            login => 'mon_login', # entrez vos identifiants de connexion ici
            pass => 'mon_pass',
        );
        $m->click;
        die $m->res->status_line unless $m->success;
     
     
        # affichage des informations
        my $tree = HTML::TreeBuilder->new_from_content( $m->content );
        print
          map { $_->as_trimmed_text . "\n" }
          $tree->look_down( _tag => 'span', id => qr/blabla_Ident/ );


    Une idée ?


    Gôm ... en plein doute !

  2. #2
    Membre éprouvé

    Profil pro
    Inscrit en
    Août 2005
    Messages
    118
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 118
    Par défaut
    Bonjour,
    Je ne connais pas bien WWW:Mechanize (j'utilise plutôt LWP::USERAgent).
    Pourquoi ne pas simplement faire un post
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    $m->post('https://blabla.gouv.fr/blablasession.asp',
         [ login => 'foo',
           pass => 'bar' ] );
    sinon
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $m->current_form->action('/blablasession.asp')
    ne marche pas ?
    A+
    Joris

  3. #3
    Expert confirmé
    Avatar de Jedai
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2003
    Messages
    6 245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Avril 2003
    Messages : 6 245
    Par défaut
    Tu diras aux administrateurs du sites qu'ils feraient mieux d'utiliser des standards, hein ? Un site gouvernemental qui ne fonctionne pas sans Javascript, c'est un peu saumâtre...

    Bon sinon je te recommande effectivement de faire ton post() à la main, après avoir repéré dans le javascript à quelle adresse tu devais l'envoyer.

    --
    Jedaï

  4. #4
    Membre éclairé
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Mai 2003
    Messages
    921
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Consultant en Business Intelligence

    Informations forums :
    Inscription : Mai 2003
    Messages : 921
    Par défaut
    Citation Envoyé par Jedai
    Tu diras aux administrateurs du sites qu'ils feraient mieux d'utiliser des standards, hein ? Un site gouvernemental qui ne fonctionne pas sans Javascript, c'est un peu saumâtre...
    Je pense que cela a été spécialement fait pour lutter contre les robots Web ... mais c'est perfectible apparemment !

    PS : Je ne mets pas encore mon post à car j'ai quelques petites choses en plus à faire qui ne fonctionnent pas encore ... mais je cherche d'abord de mon côté !

  5. #5
    Membre éclairé
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Mai 2003
    Messages
    921
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Consultant en Business Intelligence

    Informations forums :
    Inscription : Mai 2003
    Messages : 921
    Par défaut
    Je vais avoir quelques petites choses à dire aux créateurs de ce site je pense ...


    Voilà ce que j'essaye de faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $m->follow_link( text => 'blabla-FORMATION' );
        die "Link failed: ", $m->response->status_line
            unless $m->success;
    Ca ne fonctionne pas car ...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <tr onclick="window.location.href='/blablaApplif.asp?blablaAppli=49';"><td ...>blabla-FORMATION</td></tr>
    Un des éléments du menu sur lequel je veux simuler un clic est encore un événement "onclick" !


    Le mieux est de faire comme ça, non ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
        $m->get('https://blabla.gouv.fr/blablaApplif.asp?blablaAppli=49');
        	exit unless $m->success;
    Si oui, alors pourquoi :
    ne me renvoit rien ?

  6. #6
    Membre éclairé
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Mai 2003
    Messages
    921
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Consultant en Business Intelligence

    Informations forums :
    Inscription : Mai 2003
    Messages : 921
    Par défaut
    Il y a une fonction qui permet de vérifier le navigateur, mais elle n'a rien de classique ! Elle vérifie l'url à partir de laquelle on arrive sur la page en cours :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    function checkbrowserclient()
    					{var ad = window.location.pathname;
    					var ad1= window.location.pathname;
     
    						if (document.layers) {top.location.href="http://blabla.gouv.fr/";}
    						try
    							{
    								var sParentLocation = window.parent.location.href;
    								//alert(window.parent.name);window.frames["blablamenu"]
    							}
    						catch (e)
    							{
    								var sParentLocation = false;
    							}
    						if (!sParentLocation || sParentLocation ==window.location.href)
    							{
    							document.getElementById("newurl").value=window.location.href;
    							//alert('yes '+ ad+ '|');
    							document.getElementById("blablaForm").submit();
     
    							//window.location.href= "/index.asp?pageCalled=" + window.location.href;
    							}
    					}


    Je vois pas comment parer cela ... une idée ?

  7. #7
    Membre éclairé
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Mai 2003
    Messages
    921
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Consultant en Business Intelligence

    Informations forums :
    Inscription : Mai 2003
    Messages : 921
    Par défaut
    Citation Envoyé par d-jo
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    $m->post('https://blabla.gouv.fr/blablasession.asp',
         [ login => 'foo',
           pass => 'bar' ] );
    Fonctionne !

    Citation Envoyé par d-jo
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $m->current_form->action('/blablasession.asp')
    Ne fonctionne pas ... mais on s'en fout !


Discussions similaires

  1. HTTPS, Proxy web, et tracabilité
    Par easyzik dans le forum Sécurité
    Réponses: 12
    Dernier message: 04/10/2010, 12h38
  2. Web service, proxy et HTTPS
    Par eraim dans le forum Langage
    Réponses: 9
    Dernier message: 06/03/2007, 17h47
  3. [Débutant][HTTPS][Proxy] Récupération HTML
    Par jgavard dans le forum Entrée/Sortie
    Réponses: 2
    Dernier message: 06/11/2006, 11h06
  4. Création d'un robot web
    Par wassim_kh dans le forum Linux
    Réponses: 7
    Dernier message: 07/07/2006, 17h02
  5. Lecture d'un fichier sur le web (http)
    Par omeya4 dans le forum C++
    Réponses: 3
    Dernier message: 12/06/2006, 21h32

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo