diff options
Diffstat (limited to 'talermerchantdemos/blog/articles/fr/javascript-trap.html')
-rw-r--r-- | talermerchantdemos/blog/articles/fr/javascript-trap.html | 342 |
1 files changed, 342 insertions, 0 deletions
diff --git a/talermerchantdemos/blog/articles/fr/javascript-trap.html b/talermerchantdemos/blog/articles/fr/javascript-trap.html new file mode 100644 index 0000000..afde8b9 --- /dev/null +++ b/talermerchantdemos/blog/articles/fr/javascript-trap.html @@ -0,0 +1,342 @@ +<!--#set var="ENGLISH_PAGE" value="/philosophy/javascript-trap.en.html" --> + +<!--#include virtual="/server/header.fr.html" --> +<!-- Parent-Version: 1.90 --> + +<!-- This file is automatically generated by GNUnited Nations! --> +<title>Le piège JavaScript</title> + +<!--#include virtual="/philosophy/po/javascript-trap.translist" --> +<!--#include virtual="/server/banner.fr.html" --> +<h2>Le piège JavaScript</h2> + +<p>par <a href="http://www.stallman.org/">Richard Stallman</a></p> + +<p><strong>Vous exécutez peut-être des programmes non libres sur votre +ordinateur chaque jour sans même vous en apercevoir – par l'intermédiaire de +votre navigateur web.</strong></p> + +<!-- any links that used to point to the appendices should point to + free-your-javascript.html instead. --> +<blockquote> +<p>À l'attention des webmestres : il y a <a +href="/software/librejs/free-your-javascript.html">plusieurs moyens</a> +d'indiquer la licence des programmes JavaScript présents sur un site web.</p> +</blockquote> + +<p>Dans la communauté du logiciel libre, l'idée que <a +href="/philosophy/free-software-even-more-important.html">les programmes non +libres nuisent à leurs utilisateurs</a> est familière. Certains d'entre nous +défendent leur liberté en interdisant l'accès de leur machine à tous les +logiciels privateurs<a id="TransNote1-rev" +href="#TransNote1"><sup>1</sup></a> et beaucoup d'autres considèrent que la +non-liberté d'un programme est un point négatif.</p> + +<p>Beaucoup d'utilisateurs sont conscients que ce problème s'applique aussi aux +modules que les navigateurs proposent d'installer, puisqu'ils peuvent être +libres ou non. Mais les navigateurs exécutent d'autres programmes non libres +sans vous demander votre avis ni même vous prévenir – des programmes inclus +dans des pages web ou vers lesquels elles ont des liens. Ces programmes sont +le plus souvent écrits en JavaScript, bien que d'autres langages puissent +être utilisés.</p> + +<p>JavaScript (dont le nom officiel, mais peu utilisé, est ECMAScript) servait +autrefois à orner les pages web de fioritures mineures, comme des +fonctionnalités de navigation et d'affichage agréables mais non +essentielles. Il était acceptable de les considérer comme de pures +extensions du langage de balises HTML et d'ignorer le problème.</p> + +<p>Certains sites utilisent encore JavaScript de cette façon, mais beaucoup +l'utilisent pour des programmes conséquents réalisant des tâches +importantes. Par exemple, Google Docs essaie d'installer dans votre +navigateur un programme JavaScript qui pèse un demi mégaoctet, sous une +forme compactée que nous pourrions appeler ObfuScript. Cette forme compactée +s'obtient à partir du code source en supprimant les espaces supplémentaires +qui rendent le code lisible ainsi que les remarques explicatives qui le +rendent compréhensible, et en remplaçant chaque nom évocateur par un nom +court arbitraire pour qu'on ne puisse pas savoir ce qu'il est censé +représenter.</p> + +<p>Le logiciel libre est <a href="/philosophy/free-sw.html">par définition</a> +un logiciel qui, entre autres, permet aux utilisateurs d'avoir accès à son +code source (c'est-à-dire à son plan). Le code source d'un programme est la +forme préférée des programmeurs pour effectuer des modifications – et il +comprend les espaces supplémentaires, les remarques explicatives et les noms +évocateurs. Le code compacté est un substitut bidon et inutile au code +source ; le véritable code source de ces programmes n'est pas disponible +pour les utilisateurs, donc ces derniers ne peuvent pas le comprendre ; par +conséquent, le programme est non libre.</p> + +<p>Outre qu'ils ne sont pas libres, beaucoup de ces programmes sont +<em>malveillants</em> parce qu'ils <a +href="http://github.com/w3c/fingerprinting-guidance/issues/8">espionnent +l'utilisateur</a>. Pire encore, certains sites utilisent des services qui +enregistrent <a +href="https://freedom-to-tinker.com/2017/11/15/no-boundaries-exfiltration-of-personal-data-by-session-replay-scripts/">toutes +ce que fait l'utilisateur quand il regarde une page</a>. Ces services sont +censés « caviarder » les enregistrements pour en exclure certaines données +sensibles dont le site web ne doit pas avoir connaissance. Mais en admettant +même que cela soit fait de manière fiable, le but de ces services est de +donner au site d'autres données personnelles qu'il ne devrait pas posséder.</p> + +<p>Normalement, les navigateurs ne vous disent pas quand ils chargent des +programmes JavaScript. Certains d'entre eux ont un moyen de désactiver +JavaScript totalement, mais même si vous êtes conscient du problème, vous +aurez beaucoup de mal à identifier les programmes non triviaux et non libres +pour les bloquer. De toute façon, même au sein de la communauté du logiciel +libre, la plupart des utilisateurs ne sont pas conscients de ce problème ; +le silence des navigateurs tend à le dissimuler.</p> + +<p>Il est possible de publier un programme JavaScript en tant que logiciel +libre, en distribuant le code source sous une licence libre. Si le programme +est autonome (c'est-à-dire si son fonctionnement et son but sont +indépendants de la page qui l'a amené), tout va bien ; vous pouvez le copier +dans un fichier sur votre machine, le modifier, puis l'exécuter en lisant ce +fichier avec votre navigateur. Mais ce n'est pas le cas habituellement.</p> + +<p>Dans le cas habituel, les programmes JavaScript sont conçus pour une page ou +un site particulier qui en dépend pour fonctionner. Alors se présente un +autre problème : même si le code source du programme est disponible, les +navigateurs ne proposent aucun moyen d'exécuter votre version modifiée à la +place de l'original lorsque vous êtes sur cette page ou ce site. L'effet est +comparable à la tivoïsation bien qu'il soit, en principe, un peu moins +difficile à contourner.</p> + +<p>JavaScript n'est pas le seul langage que les sites web utilisent pour les +programmes envoyés aux utilisateurs. Flash permet la programmation à l'aide +d'une variante étendue de JavaScript ; si un jour nous avons un lecteur +Flash libre suffisamment complet, il nous faudra traiter le problème des +programmes Flash non libres. Silverlight est susceptible de poser un +problème similaire à Flash, en pire, car Microsoft l'utilise comme +plateforme pour des codecs non libres. Un remplacement libre de Silverlight +ne ferait pas l'affaire pour le monde du libre, à moins qu'il ne propose +normalement des codecs de remplacement libres.</p> + +<p>Les applets Java s'exécutent aussi dans le navigateur et soulèvent des +problèmes similaires. En général, n'importe quel système d'applet pose ce +genre de problème. Avoir un environnement d'exécution libre pour un applet +ne fait que déplacer le problème.</p> + +<p>Il est théoriquement possible de programmer en HTML et CSS, mais en pratique +les possibilités sont limitées et c'est assez pénible ; le simple fait de +réaliser quelque chose par cette technique est un hack impressionnant. De +tels programmes doivent être libres, mais aujourd'hui, en 2019, cela ne pose +pas de réel problème pour la liberté de l'utilisateur.</p> + +<p>Un fort mouvement s'est développé qui appelle les sites web à ne communiquer +qu'avec des formats et des protocoles libres (certains disent « ouverts ») ; +c'est-à-dire des formats dont la documentation est publiée et que chacun est +libre de mettre en œuvre. Cependant, la présence de programmes JavaScript +dans les pages web rend ce critère insuffisant. Le langage JavaScript +lui-même, en tant que format, est libre ; utiliser JavaScript dans un site +web n'est donc pas nécessairement mauvais. Cependant, comme nous l'avons vu +plus haut, cela peut être mauvais si le programme JavaScript est non +libre. Quand le site transmet un programme à l'utilisateur, il ne suffit pas +que le programme soit écrit dans un langage documenté et libre d'entraves ; +ce programme doit aussi être libre. « Ne transmet que des programmes libres +aux utilisateurs » ; cette règle doit faire partie des critères définissant +un comportement correct des sites web.</p> + +<p>Le chargement et l'exécution silencieux de programmes non libres est l'un +des nombreux problèmes soulevés par les « applications web ». Le terme +« application web » a été conçu pour ne pas tenir compte de la distinction +fondamentale entre un logiciel fourni aux utilisateurs et un logiciel +s'exécutant sur un serveur. Il peut faire référence à un programme client +spécialisé qui s'exécute dans un navigateur ; il peut faire référence à un +logiciel serveur spécialisé ; il peut faire référence à un programme client +spécialisé travaillant main dans la main avec un logiciel serveur +spécialisé. Les côtés client et serveur soulèvent des problèmes éthiques +différents, bien qu'ils soient si intimement intégrés qu'on pourrait les +considérer comme parties d'un seul et même programme. Cet article ne +s'occupe que du logiciel client. Nous traitons le problème du serveur +séparément.</p> + +<p>Pratiquement, comment pouvons-nous traiter le problème des programmes +JavaScript non triviaux et non libres dans les sites web ? La première étape +est de ne pas les laisser s'exécuter.</p> + +<p>Que voulons-nous dire par « non trivial » ? Puisque c'est une question +d'interprétation, il s'agit de concevoir un critère simple qui donne de bons +résultats, plutôt que de déterminer la seule réponse correcte.</p> +<p> +Actuellement, nous considérons un programme JavaScript comme non trivial +s'il répond à l'une des conditions suivantes :</p> + +<ul> + <li>il est appelé en tant que script externe (à partir d'une autre page) ;</li> + + <li>il déclare un tableau contenant plus de 50 éléments ;</li> + + <li>il définit une entité nommée (fonction ou méthode) qui appelle autre chose +qu'une primitive ;</li> + + <li>il définit une entité nommée comprenant plus de trois éléments de +construction conditionnels et une construction en boucle ;</li> + + <li>le code n'appartenant pas aux définitions nommées appelle autre chose que +des primitives et des fonctions définies plus haut dans la page ;</li> + + <li>le code n'appartenant pas aux définitions nommées comprend, au total, plus +de trois éléments de construction conditionnels et une construction en +boucle ;</li> + + <li>il fait appel à <b>eval</b> ;</li> + + <li>il fait des requêtes Ajax ;</li> + + <li>Pour accéder de manière dynamique aux propriétés des objets, il utilise une +notation crochet qui ressemble à <b><em>objet</em>[<em>propriété</em>]</b>.</li> + + <li>il modifie le <abbr title="Document Object Model">DOM</abbr> ;</li> + + <li>il utilise des constructions dynamiques JavaScript qui sont difficiles à +analyser sans interpréter le programme, ou bien il est chargé en même temps +que des scripts qui utilisent de telles constructions ; cela concerne plus +précisément l'utilisation avec certaines méthodes (<b>Obj.write</b>, +<b>Obj.createElement</b>, etc.) de tout élément de construction autre qu'une +chaîne de caractères constante.</li> +</ul> + +<p>Comment savoir si du code JavaScript est libre ? Dans un <a +href="/licenses/javascript-labels.html">autre article</a>, nous proposons +une méthode qui permet à un programme JavaScript non trivial inclus dans une +page web d'indiquer l'URL de son code source, ainsi que sa licence, en +utilisant des commentaires stylisés.</p> + +<p>Enfin, nous devons modifier les navigateurs pour qu'ils détectent et +bloquent le JavaScript non trivial et non libre dans les pages web. Le +programme <a href="/software/librejs/">LibreJS</a> [en] détecte le +JavaScript non libre et non trivial dans les pages que vous visitez, et le +bloque. LibreJS est intégré à IceCat et peut être ajouté à Firefox en tant +que module complémentaire.</p> + +<p>Les utilisateurs de navigateurs ont aussi besoin d'une fonctionnalité facile +d'emploi, indiquant le code JavaScript à <em>substituer</em> au JavaScript +d'une page donnée (le code spécifié pourrait être un remplacement total, ou +une version modifiée du programme JavaScript libre de cette +page). Greasemonkey arrive presque à le faire, mais pas tout à fait, car il +ne garantit pas de modifier le code JavaScript d'une page avant que le +programme ne commence à s'exécuter. On peut utiliser un proxy local, mais +c'est trop malcommode actuellement pour constituer une réelle solution. Nous +avons besoin de construire une solution fiable et pratique, ainsi que des +sites pour partager les modifications. Le projet GNU voudrait recommander +les sites dédiés exclusivement aux modifications libres.</p> + +<p>Ces fonctionnalités rendront possible pour un programme JavaScript inclus +dans une page web d'être réellement libre. JavaScript ne sera plus un +obstacle particulier à notre liberté – pas plus que C et Java ne le sont +maintenant. Nous serons en mesure de rejeter et même de remplacer les +programmes JavaScript non triviaux et non libres, tout comme nous avons +rejeté et remplacé les paquets non libres pour les installations +classiques. Notre campagne pour libérer le code JavaScript des sites web +pourra alors commencer.</p> + +<p>Entre-temps, il existe un cas où il est acceptable d'exécuter un programme +JavaScript non libre : l'envoi d'une réclamation aux opérateurs du site web +leur demandant de libérer le code JavaScript de leur site, ou bien de +l'éliminer. N'hésitez pas à activer JavaScript temporairement pour faire ça +– mais n'oubliez pas de le désactiver après coup.</p> + +<!-- any links that used to point to the appendices should point to + free-your-javascript.html instead. --> +<blockquote> +<p>À l'attention des webmestres : il y a <a +href="/software/librejs/free-your-javascript.html">plusieurs moyens</a> +d'indiquer la licence des programmes JavaScript présents sur un site web.</p> +</blockquote> + +<p><strong>Remerciements:</strong> Je remercie <a +href="/people/people.html#mattlee">Matt Lee</a> et <a +href="http://ejohn.org">John Resig</a> pour leur aide dans la définition de +notre proposition de critère, et David Parunakian pour avoir porté ce +problème à mon attention.</p> + +<div class="translators-notes"> + +<!--TRANSLATORS: Use space (SPC) as msgstr if you don't have notes.--> +<hr /><b>Notes de traduction</b> <ol> +<li id="TransNote1"><a href="#TransNote1-rev" +class="nounderline">↑</a> également appelés « logiciels +propriétaires ».<br/><br/></li> +</ol></div> +</div> + +<!-- for id="content", starts in the include above --> +<!--#include virtual="/server/footer.fr.html" --> +<div id="footer"> +<div class="unprintable"> + +<p>Veuillez envoyer les requêtes concernant la FSF et GNU à <a +href="mailto:gnu@gnu.org"><gnu@gnu.org></a>. Il existe aussi <a +href="/contact/">d'autres moyens de contacter</a> la FSF. Les liens +orphelins et autres corrections ou suggestions peuvent être signalés à <a +href="mailto:webmasters@gnu.org"><webmasters@gnu.org></a>.</p> + +<p> +<!-- TRANSLATORS: Ignore the original text in this paragraph, + replace it with the translation of these two: + + We work hard and do our best to provide accurate, good quality + translations. However, we are not exempt from imperfection. + Please send your comments and general suggestions in this regard + to <a href="mailto:web-translators@gnu.org"> + + <web-translators@gnu.org></a>.</p> + + <p>For information on coordinating and submitting translations of + our web pages, see <a + href="/server/standards/README.translations.html">Translations + README</a>. --> +Nous faisons le maximum pour proposer des traductions fidèles et de bonne +qualité, mais nous ne sommes pas parfaits. Merci d'adresser vos commentaires +sur cette page, ainsi que vos suggestions d'ordre général sur les +traductions, à <a href="mailto:web-translators@gnu.org"> +<web-translators@gnu.org></a>.</p> +<p>Pour tout renseignement sur la coordination et la soumission des +traductions de nos pages web, reportez-vous au <a +href="/server/standards/README.translations.html">guide de traduction</a>.</p> +</div> + +<!-- Regarding copyright, in general, standalone pages (as opposed to + files generated as part of manuals) on the GNU web server should + be under CC BY-ND 4.0. Please do NOT change or remove this + without talking with the webmasters or licensing team first. + Please make sure the copyright date is consistent with the + document. For web pages, it is ok to list just the latest year the + document was modified, or published. + + If you wish to list earlier years, that is ok too. + Either "2001, 2002, 2003" or "2001-2003" are ok for specifying + years, as long as each year in the range is in fact a copyrightable + year, i.e., a year in which the document was published (including + being publicly visible on the web or in a revision control system). + + There is more detail about copyright years in the GNU Maintainers + Information document, www.gnu.org/prep/maintain. --> +<p>Copyright © 2009-2013, 2016, 2017, 2018, 2019 Richard Stallman</p> + +<p>Cette page peut être utilisée suivant les conditions de la licence <a +rel="license" +href="http://creativecommons.org/licenses/by-nd/4.0/deed.fr">Creative +Commons attribution, pas de modification, 4.0 internationale (CC BY-ND +4.0)</a>.</p> + +<!--#include virtual="/server/bottom-notes.fr.html" --> +<div class="translators-credits"> + +<!--TRANSLATORS: Use space (SPC) as msgstr if you don't want credits.--> +Traduction : Cédric Corazza.<br /> Révision : <a +href="mailto:trad-gnu@april.org">trad-gnu@april.org</a></div> + +<p class="unprintable"><!-- timestamp start --> +Dernière mise à jour : + +$Date: 2019/12/30 12:08:30 $ + +<!-- timestamp end --> +</p> +</div> +</div> +<!-- for class="inner", starts in the banner include --> +</body> +</html> |