Assiste.com - Sécurité informatique - Vie privée sur le Web - Neutralité d'Internet

cr  01.01.2012      r+  22.10.2024      r-  22.10.2024      Pierre Pinard.         (Alertes et avis de sécurité au jour le jour)

JavaScript est un langage de programmation de scripts.

JavaScript est une technologie totalement standard et indispensable, sinon quasiment rien ne fonctionnerait. Des fonctionnalités telles que les menus, les sons, les vidéos, et quasiment toutes les fonctions liées à l'interactivité entre l'utilisateur et le Web sont dépendantes de JavaScript. À ce titre, JavaScript est une technologie embarquée nativement dans tous les navigateurs (elle ne se présente pas sous forme d'un module additionnel et optionnel).

À une date donnée, la version de JavaScript peut être différente d'un navigateur à un autre, les mises à jour de JavaScript (rares) venant avec les mises à jour du navigateur.



JavaScript ne contient pas de fonction permettant de lire directement la version de JavaScript supportée par le navigateur Web que vous utilisez. Ce bout de code, ce script, mixte langage HTML et langage JavaScript pour afficher la version maximale de JavaScript supportée par votre navigateur utilisé (la version la plus récente de JavaScript est la 1.7) :

Quelle est la version de JavaScript actuellement supportée dans le navigateur que vous utilisez ?




<script type="text/javascript">
var jsver = 1.0;
</script>
<script language="Javascript1.1" type="text/javascript">
jsver = 1.1;
</script>
<script language="Javascript1.2" type="text/javascript">
jsver = 1.2;
</script>
<script language="Javascript1.3" type="text/javascript">
jsver = 1.3;
</script>
<script language="Javascript1.4" type="text/javascript">
jsver = 1.4;
</script>
<script language="Javascript1.5" type="text/javascript">
jsver = 1.5;
</script>
<script language="Javascript1.6" type="text/javascript">
jsver = 1.6;
</script>
<script language="Javascript1.7" type="text/javascript">
jsver = 1.7;
</script>
<script type="text/javascript">
document.write('<p><b>Version de Javascript ' + jsver
+ ' supportée</b></p>');
</script>



Les langages de scripts existent « côté client », comme « côté serveur » et le Web est un monde client/serveur.


Exécution du script :



Il n'y a pas de mise à jour de JavaScript au sens habituel du terme. Les mises à jour se font lors de la mise à jour du navigateur Web.



Le langage de programmation de scripts (9) JavaScript fut créé en 1995 par Brendan Eich (11) pour la société Netscape (5) (6). Il est apparu pour la première fois publiquement dans la version 2.0 du navigateur de cette société, Netscape Navigator (7), qui était alors quasiment le seul navigateur Internet disponible, Internet Explorer de Microsoft étant alors à peine en balbutiements (la 1ère version d'Internet Explorer, la 1.0 finale, date d'Août 1995 et ce n'est qu'à partir de sa version 3, d'Août 96, que JavaScript y apparaît). JavaScript fut le premier langage de programmation orienté pages Web. Il est très largement utilisé pour ajouter au langage de description de pages HTML l'interactivité et le dynamisme que ce dernier ignore totalement. Html était, à l'origine, un moyen inter-universitaire d'échange de textes "très sérieux" c'est-à-dire bruts, glacials et sans fioriture (ce n'est pas un reproche - à l'université on n'est pas là pour rigoler, c'est tout).

JavaScript s'appelait, initialement, LiveScript. Il prit le nom de JavaScript dans un communiqué de presse (1) commun de Netscape (5) (6) et Sun Microsystems (12) le 4 décembre 1995. Il y est décrit comme un complément à Java (8), initiative plus commerciale que fondée sur la réalité, même si JavaScript s'est inspiré de Java (8) et lui ressemble syntaxiquement. Son annonce et son nommage contribuèrent à créer, dès le premier jour et aujourd'hui encore, la confusion entre les deux langages dans les esprits.



JavaScript permet de manipuler des objets (au sens informatique du terme). Les scripts (9) JavaScript sont intégralement interprétés par votre navigateur, sur votre appareil (côté "client" - par opposition aux langages qui s'exécutent ou sont interprétés côté "serveur" dans le monde client/serveur du Web) sans phase de compilation précédente, lorsque le webmaster l'incorpore dans une page Web. Vous recevez les scripts (9) en code source tels qu'ils ont été écrits, directement inclus dans le code HTML. L'interpréteur en vérifie la syntaxe chez-vous. Vous pouvez avoir des messages d'erreurs si le développeur n'a pas complètement testé ses scripts (9).

Nota : pour écrire est exécuter un programme en JavaScript, il vous suffit de votre Notepad de Windows (le plus basique des éditeurs de texte) et d'un navigateur pas trop vieux, c'est tout.

Nota : il y a le cas des obfuscations.



C'est le langage de script le plus utilisé sur le Web. JavaScript ayant été adopté par tout le monde et s'étant universalisé, sa définition est passée d'un standard de fait à une définition normalisée (norme ECMA-262 aussi appelée ECMAScript (2) également approuvée en tant que ISO/IEC 16262). La version 3 de la norme ECMA-262 date de 1999 et correspond à la version 1.5 de JavaScript.

Aujourd'hui nous ne devrions plus parler de JavaScript mais de l'implémentation JavaScript de ECMAScript ou de l'implémentation JScript de ECMAScript ou encore de l'implémentation SpiderMonkey de ECMAScript etc.

Les implémentations de ECMAScript :

  • L'implémentation JavaScript de ECMAScript

    • SpiderMonkey par la Fondation Mozilla
      L'interpréteur JavaScript implémenté par la Fondation Mozilla dans ses navigateurs (dans le moteur de rendu Gecko) s'appelle SpiderMonkey et est écrit en langage "C". Les navigateurs utilisant Gecko sont aujourd'hui les plus compatibles avec le standard ECMAScript - le devançant même de plusieurs mois : Firefox 2 reconnaît JavaScript 1.7, qui correspond au standard actuel ECMA-262 Edition 3, tandis que Firefox 3 prévoit déjà d'implémenter JavaScript 1.9, alors que le standard ECMA-262 Edition 4 n'est pas encore défini - mais devrait être synchronisé.

    • JavaScript
      L'implémentation ECMAScript que l'on retrouve dans les navigateurs reposant sur KHTML comme Konqueror ou Safari, Adobe Acrobat et Open Laszlo. Opera implémente totalement ECMA-262 Edition 2 et 3, tout en ajoutant les extensions propres à JavaScript et JScript.

  • L'implémentation JScript de ECMAScript par Microsoft
    L'interpréteur JavaScript implémenté par Microsoft dans son navigateur Internet Explorer s'appelle JScript et, à l'image de tous les travaux de Microsoft dont son langage html, se démarque de la norme en y apportant des spécificités hors normes largement documentées dans lesquelles, malheureusement, de nombreux webmasters s'engouffrent. Html et JavaScript étant les piliers des pages Web et ces 2 implémentations chez Microsoft n'étant pas standards, ceci constitue 2 raisons largement suffisantes (parmi de bien nombreuses autres raisons) d'utiliser un navigateur respectueux des normes : Mozilla (3) ou l'une de ses déclinaisons comme Firefox.

    JScript repose sur le moteur Active Scripting (ex-ActiveX Scripting) du navigateur de Microsoft. Sa dernière version JScript .Net, implémente déjà certaines sections de la prochaine version du standard ECMA. IE7, par contre, utilise la même implémentation qu'IE6, qui correspond à JavaScript 1.5.

  • L'implémentation ActionScript de ECMAScript
    Le langage de Flash a commencé avec quelques mots clefs, pour aujourd'hui être en passe d'être l'une des implémentations les plus fidèles. ActionScript 2 implémente ECMA-262 Edition 3, tandis qu'AS3 utilise déjà les concepts de l'Edition 4. L'implication d'Adobe est telle que l'une des avancées technologiques d'AS3, une machine virtuelle accélérant largement l'exécution de codes ECMASript, sera utilisée par le moteur Gecko grâce à la mise en Open Source d'icelui. AS ajoute à son implémentation des API spécifiques à Flash.

  • L'implémentation InScript de ECMAScript
    iCan implémente sa propre version de JavaScript, InScript.

  • L'implémentation E4X de ECMAScript
    ECMAScript for XML est une extension au standard ECMAScript qui lui ajoute le support natif d'XML, offrant une alternative à la syntaxe DOM. Créé par BEA, E4X correspond aujourd'hui au document ECMA-357, qui en est à sa seconde édition.



Y a t'il un problème d'insécurité avec JavaScript ? Oui et non !

  • Non à priori car, en lui-même, le langage est relativement limité et ne permet pas grand chose de directement dangereux sur les objets (les fichiers...) de votre système.

  • Oui, tout de même, car le détournement de ce qu'il permet de faire pose problème. La simple ouverture d'une fenêtre en pop-up (13) se fait par un JavaScript et n'est pas dangereuse en soi mais le contenu de la fenêtre peut être récupéré sur un site tiers (un autre site, externe). Ce simple fait d'externaliser une ressource, bien avant d'en analyser le contenu, hostile ou non, permet de vous tracer (14) (tracking - espionnage) et de récupérer automatiquement toutes ces informations sur vous (15) et celles-ci (16) et encore celles-là (17). C'est, très exactement, l'usage (parmi de nombreuses autres hostilités) de la totalité des pop-ups publicitaires. Comme il n'est pas possible d'interdire purement et simplement l'usage de JavaScript dans une page Web (sinon quasiment plus rien de légitime ne fonctionnerait) la contre-mesure anti-javascript (4) passe par l'utilisation de "proxy locaux" qui vont filtrer les scripts (9) et inhiber en temps réel (ou carrément effacer) les scripts hostiles. Quelques exemples :

    • JavaScripts de pop-ups (13) automatiques

      Le principe général d'acceptation d'ouverture de fenêtres en pop-ups (13) est que cette ouverture soit consécutive à une action humaine : "faire un clic humain sur un lien". Si un script ouvrant automatiquement une pop-ups (13) est reconnu, il sera effacé ou bloqué.

    • JavaScripts de pop-ups (13) au chargement d'une page Web

      Le script suivant, dans la balise <body> d'une page Web, doit impérativement être empêché de fonctionner car il s'agit de l'ouverture automatique d'une pop-up (13) non sollicitée dès le chargement de la page Web, sans aucune intervention du visiteur.
      <body onload="windows.open('pageweb.html','Titre de la fenêtre','toolbar=0','status=0','width=400','height=400'')">

    • JavaScripts de chargement de fenêtres dites Pop-under (18)

      La même action que pour les pop-ups (13) (blocage ou effacement à la volée) doit être réalisée.

    • JavaScripts de gestion de bannières publicitaires (19)

      Ces scripts, reconnus par diverses méthodes (dimensions standardisées des bannières (20), serveurs de ressources publicitaires connus appelés adservers (21), filtres de mots clés dans les liens (urls) comme le PacFile (22) de l'utilitaire SpyBlocker (23) etc. ...) doivent être bloqués ou effacés à la volée.

    • JavaScripts de gestion d'interstitiels (24)

    • JavaScripts de gestion de superstitiels (25)

    • Etc.

  • Exemple de JavaScripts à bloquer dans une page réelle (5)
    Cette page (réelle) traque (espionne) ses visiteurs et les bombarde de publicités. Elle comporte plusieurs JavaScripts conduisant à l'affichage d'une publicité en Pop-under (18), l'affichage de publicités en interstitiel (24), l'affichage de publicités en bannières (19) depuis un adserver (21) et la gestion d'un Cookie (26).



Peut-on changer d'interpréteur JavaScript tout en conservant le même navigateur ?

Non ! Il faut changer de navigateur. Nous recommandons l'utilisation de FireFox. L'idée de changer d'interpréteur JavaScript, pour durcir sa machine contre certaines malveillances, est évoquée souvent sur certains forums de discussion. Elle provient sans doute de la confusion dans les esprits entre JAVA et JavaScript. Il est effectivement possible (et même obligatoire depuis une décision de justice condamnant Microsoft) de changer de machine virtuelle JAVA mais pour changer d'interpréteur JavaScript il faut changer de moteur de rendu, donc changer de navigateur.



Les applications en JavaScript peuvent être utilisées dans des pages Web, le code n'est pas compilé, le code source est incorporé dans les pages Web, les applications sont appelées des scripts, ils ont accès aux objets de votre navigateur, sont relativement plus simples à écrire que JAVA même s'il y a une grande ressemblance, et sont relativement limités. Leur hostilité est indirecte.



  • JavaScript