Un manuel pour les compétiteurs

par

Caesum

(A Challengers Handbook - Site original : http://www.caesum.com)
(Version française par CommComm avec l'aimable autorisation de Caesum - Cronos - 26 février 2006)

Javascript

Tout au long de ces pages, je présupposerai que vous disposez d'un certain niveau préalable de connaissance. Ce que je veux montrer, ce sont quelques "trucs" qui vous feront voir probablement un peu plus que ce que vous ne voyez maintenant. La première chose dont nous allons parler au sujet de Javascript, c'est la lecture du code source. Il y a plusieurs manières de regarder le code source de pages web, à supposer que vous utilisiez IE :

  • Faites un clic droit et choisissez "Afficher la source". Mais ça ne marchera pas si la page web vous interpelle aussitôt avec une boite de saisie quelconque : vous ne pourrez probablement pas y arriver. A noter que Javascript peut aussi désactiver le clic droit.

  • Retrouvez la page à partir de votre cache. Vous devriez savoir où se trouve le cache et comment regarder dedans. Ca peut être utile. Le mien est situé en c:\documents and settings\administrator\local settings\temporary internet files\. Un coup d'oeil permet de voir que j'ai 12 500 fichiers dans le cache. La méthode la plus facile pour trouver des fichiers dans votre cache est de chercher ou de trier par date juste après avoir rafraîchi la page cible.

  • Utilisez une URL. C'est ma méthode préférée. Supposez que la page cible soit quelque chose du genre http://www.google.com/, alors tapez simplement view-source:http://www.google.com/ dans la barre d'adresses et attendez le chargement. La page source correspondante devrait alors apparaître dans le bloc-notes. Ceci se passe avant le lancement de Javascript, ce qui vous permet d'accéder directement à la source et de voir ce qui se passe.

    Maintenant, venons en aux challenges Javascript. Les challenges Javascript les plus simples sont fondés sur la fausse piste. Par exemple, des pages avec de grandes zones blanches dans la source et un message disant "source HTML cachée". Une de mes préférés parmi ces fausses pistes est le petit morceau de Javascript qui ressemble à ça:

    <script src="JavaScript"><!--
    var pass;
    pass=prompt("Password:","");
    if(pass=="letmein")
    { window.location.href="done.htm";
    }
    else
    { window.location.href="failed.htm";
    }
    --></script>
    

    En fait vous pouvez même l'essayer ici. Alors, quel est le mot de passe ? Eh bien, ce n'est pas "letmein". En fait le mot de passe correct est "sheep" ! Maintenant, vous devez vous demander comment cela est-il Dieu possible. Eh bien, c'est tout de la fausse piste. La première ligne dit que le script est dans un fichier nommé "JavaScript", le reste n'apparaissant que dans un commentaire. Vous devez donc regarder dans le fichier appelé JavaScript pour voir le vrai code source. En réalité, vous devriez tirer plus d'un enseignement de ce simple exemple. Ce n'est pas seulement ce truc marrant en javascript, mais il s'agit en fait de l'observation et de la compréhension. Sans compréhension de Javascript vous ne devinerez jamais la réponse ou vous ne saurez jamais ce que vous avez fait de travers. Même en connaissant à fond Javascript, la première fois que vous êtes tombé sur ce problème, il vous a probablement surpris. Ici la solution est de charger le fichier JavaScript dans votre navigateur et de visionner le vrai code source.

    La leçon suivante dans la série "Fausse route au pays du Javascript" est le bon vieux coup du "Quelle variable suis-je ?". C'est fondamentalement le cas où vous additionnez 2 et 2 et vous obtenez 22 et non 4. Ceci étant dit, vous ne devriez plus avoir de problème avec ça. Souvent, vous aurez le droit en plus à une nouvelle erreur d'aiguillage qui fera que vous ne réaliserez pas qu'une concaténation se produit à un certain moment plutôt que l'addition attendue.

    Pour terminer, nous parlerons simplement de la récupération de valeurs dans des challenges JavaScript. Par exemple, vous avez votre page html avec un méchant code javascript et vous n'arrivez pas à comprendre ce qui se passe. Vous devez contrôler une certaine valeur à un moment donné. La meilleure chose à faire dans ce cas est d'enregistrer la page sur votre disque dur et d'y ajouter quelques lignes de code de votre cru. Le truc auquel il faut penser, c'est "alert". Ainsi, alert(mavariable) fera surgir à l'écran une boîte de message avec la valeur que vous voulez voir. Jetez un oeil à ceci où j'ai inséré quelques "alert" pour restituer des valeurs à certains endroits.

    Si tout va bien, avec ces quelques astuces, vous devriez pouvoir commencer à creuser quelques épreuves faciles de Javascript, et vous devriez avoir suffisamment confiance pour commencer à bricoler un peu sur des niveaux de javascript un peu plus compliqués. En général, la plupart des challenges javascript ne sont pas beaucoup plus sophistiqués que ce dont je vous ai parlé. Rappelez-vous seulement ceci : si c'est du javascript, vous avez accès au code source complet, il tourne sur votre ordinateur et vous pouvez en faire ce que vous voulez.

    Une des épreuves les plus cools que j'aie jamais vues ressemblait à ça :

    <script>
    <!--
    document.write(unescape("une chaine sacrément longue"));
    --></script>
    

    et c'était tout. La page décryptait son propre source qui contenait encore du javascript et s'exécutait. Une façon de gérer ce genre de choses est d'ouvrir une autre fenêtre avec quelque chose comme :

    <script>
    <!--
    msgWindow=window.open("","displayWindow","menubar=yes");
    msgWindow.document.write(unescape("une chaine sacrément longue"));
    --></script>
    

    et comme ça, vous pouvez voir le code source. Finalement, quand vous êtes réellement bloqué, ça vaut le coup de visiter quelques pages de référence du genre Netscape ou Sun.

    Un seul livre sur JavaScript, il est excellent, bien que peut-être pas vraiment adapté pour les vrais newbies.

    Retour au sommaire