taler-merchant-demos

Python-based Frontends for the Demonstration Web site
Log | Files | Refs | Submodules | README | LICENSE

javascript-trap.html (19075B)


      1 <!--#set var="ENGLISH_PAGE" value="/philosophy/javascript-trap.en.html" -->
      2 
      3 <!--#include virtual="/server/header.fr.html" -->
      4 <!-- Parent-Version: 1.96 -->
      5 <!-- This page is derived from /server/standards/boilerplate.html -->
      6 <!--#set var="TAGS" value="essays licensing traps" -->
      7 <!--#set var="DISABLE_TOP_ADDENDUM" value="yes" -->
      8 
      9 <!-- This file is automatically generated by GNUnited Nations! -->
     10 <title>Le piège JavaScript - Projet GNU - Free Software Foundation</title>
     11 
     12 <!--#include virtual="/philosophy/po/javascript-trap.translist" -->
     13 <!--#include virtual="/server/banner.fr.html" -->
     14 <!--#include virtual="/philosophy/ph-breadcrumb.fr.html" -->
     15 <!--GNUN: OUT-OF-DATE NOTICE-->
     16 <!--#include virtual="/server/top-addendum.fr.html" -->
     17 <div class="article reduced-width">
     18 <h2>Le piège JavaScript</h2>
     19 
     20 <address class="byline">par <a href="https://www.stallman.org/">Richard Stallman</a></address>
     21 
     22 <p><strong>Vous exécutez peut-être des programmes non libres sur votre
     23 ordinateur chaque jour sans même vous en apercevoir – par l'intermédiaire de
     24 votre navigateur web.</strong></p>
     25 
     26 <!-- any links that used to point to the appendices should point to
     27      free-your-javascript.html instead.  -->
     28 <div class="announcement">
     29 <hr class="no-display" />
     30 <p>À l'attention des webmestres : il y a <a
     31 href="/software/librejs/free-your-javascript.html">plusieurs moyens</a>
     32 d'indiquer la licence des programmes JavaScript présents sur un site web.</p>
     33 <hr class="no-display" />
     34 </div>
     35 
     36 <p>Dans la communauté du logiciel libre, l'idée que <a
     37 href="/philosophy/free-software-even-more-important.html">les programmes non
     38 libres nuisent à leurs utilisateurs</a> est familière. Certains d'entre nous
     39 défendent leur liberté en interdisant l'accès de leur machine à tous les
     40 logiciels privateurs<a id="TransNote1-rev"
     41 href="#TransNote1"><sup>1</sup></a> et beaucoup d'autres considèrent que la
     42 non-liberté d'un programme est un point négatif.</p>
     43 
     44 <p>Beaucoup d'utilisateurs sont conscients que ce problème s'applique aussi aux
     45 modules que les navigateurs proposent d'installer, puisqu'ils peuvent être
     46 libres ou non. Mais les navigateurs exécutent d'autres programmes non libres
     47 sans vous demander votre avis ni même vous prévenir – des programmes inclus
     48 dans des pages web ou vers lesquels elles ont des liens. Ces programmes sont
     49 le plus souvent écrits en JavaScript, bien que d'autres langages puissent
     50 être utilisés.</p>
     51 
     52 <p>JavaScript (dont le nom officiel, mais peu utilisé, est ECMAScript) servait
     53 autrefois à orner les pages web de fioritures mineures, comme des
     54 fonctionnalités de navigation et d'affichage agréables mais non
     55 essentielles. Il était acceptable de les considérer comme de pures
     56 extensions du langage de balises HTML et d'ignorer le problème.</p>
     57 
     58 <p>Certains sites utilisent encore JavaScript de cette façon, mais beaucoup
     59 l'utilisent pour des programmes conséquents réalisant des tâches
     60 importantes. Par exemple, Google Docs essaie d'installer dans votre
     61 navigateur un programme JavaScript qui pèse un demi mégaoctet, sous une
     62 forme compactée que nous pourrions appeler ObfuScript. Cette forme compactée
     63 s'obtient à partir du code source en supprimant les espaces supplémentaires
     64 qui rendent le code lisible ainsi que les remarques explicatives qui le
     65 rendent compréhensible, et en remplaçant chaque nom évocateur par un nom
     66 court arbitraire pour qu'on ne puisse pas savoir ce qu'il est censé
     67 représenter.</p>
     68 
     69 <p>Le logiciel libre est <a href="/philosophy/free-sw.html">par définition</a>
     70 un logiciel qui, entre autres, permet aux utilisateurs d'avoir accès à son
     71 code source (c'est-à-dire à son plan). Le code source d'un programme est la
     72 forme préférée des programmeurs pour effectuer des modifications – et il
     73 comprend les espaces supplémentaires, les remarques explicatives et les noms
     74 évocateurs. Le code compacté est un substitut bidon et inutile au code
     75 source ; le véritable code source de ces programmes n'est pas disponible
     76 pour les utilisateurs, donc ces derniers ne peuvent pas le comprendre ; par
     77 conséquent, le programme est non libre.</p>
     78 
     79 <p>Outre qu'ils ne sont pas libres, beaucoup de ces programmes sont
     80 <em>malveillants</em> parce qu'ils <a
     81 href="https://github.com/w3c/fingerprinting-guidance/issues/8">espionnent
     82 l'utilisateur</a>. Pire encore, certains sites utilisent des services qui
     83 enregistrent <a
     84 href="https://freedom-to-tinker.com/2017/11/15/no-boundaries-exfiltration-of-personal-data-by-session-replay-scripts/">toutes
     85 ce que fait l'utilisateur quand il regarde une page</a>. Ces services sont
     86 censés « caviarder » les enregistrements pour en exclure certaines données
     87 sensibles dont le site web ne doit pas avoir connaissance. Mais en admettant
     88 même que cela soit fait de manière fiable, le but de ces services est de
     89 donner au site d'autres données personnelles qu'il ne devrait pas posséder.</p>
     90 
     91 <p>Normalement, les navigateurs ne vous disent pas quand ils chargent des
     92 programmes JavaScript. Certains d'entre eux ont un moyen de désactiver
     93 JavaScript totalement, mais même si vous êtes conscient du problème, vous
     94 aurez beaucoup de mal à identifier les programmes non triviaux et non libres
     95 pour les bloquer. De toute façon, même au sein de la communauté du logiciel
     96 libre, la plupart des utilisateurs ne sont pas conscients de ce problème ;
     97 le silence des navigateurs tend à le dissimuler.</p>
     98 
     99 <p>D'abord une mise au point : le langage JavaScript n'est pas intrinsèquement
    100 meilleur ou pire pour la liberté des utilisateurs que n'importe quel autre
    101 langage. Il est possible de publier un programme JavaScript en tant que
    102 logiciel libre, en distribuant le code source sous une licence libre. Si le
    103 programme est autonome (c'est-à-dire si son fonctionnement et son but sont
    104 indépendants de la page qui l'a amené), tout va bien ; vous pouvez le copier
    105 dans un fichier sur votre machine, le modifier, puis l'exécuter en lisant ce
    106 fichier avec votre navigateur. Il est même possible de l'empaqueter pour
    107 l'installer comme les autres programmes libres et l'invoquer avec une
    108 commande du shell. Ces programmes ne posent pas de problèmes éthiques
    109 différents de ceux des programmes C.</p>
    110 
    111 <p>Le problème du piège JavaScript s'applique lorsque le programme JavaScript
    112 accompagne la page web visitée par l'utilisateur. Ces programmes sont conçus
    113 pour fonctionner avec une page ou un site particulier, qui en dépend pour
    114 fonctionner.</p>
    115 
    116 <p>Supposons que vous modifiez le code JavaScript de la page. Alors se présente
    117 un autre problème : même si le code source du programme est disponible, les
    118 navigateurs ne proposent aucun moyen d'exécuter votre version modifiée à la
    119 place de l'original lorsque vous êtes sur cette page ou ce site. L'effet est
    120 comparable à la tivoïsation bien qu'il soit, en principe, un peu moins
    121 difficile à contourner.</p>
    122 
    123 <p>JavaScript n'est pas le seul langage que les sites web utilisent pour les
    124 programmes envoyés aux utilisateurs. Flash permettait la programmation à
    125 l'aide d'une variante étendue de JavaScript, mais cette époque est révolue ;
    126 si un jour nous avons un lecteur Flash libre suffisamment complet, il nous
    127 faudra traiter le problème des programmes Flash non libres. Microsoft
    128 Silverlight est susceptible de poser un problème similaire à Flash, en pire,
    129 car Microsoft l'utilise comme plateforme pour des codecs non libres. Un
    130 remplacement libre de Silverlight ne ferait pas l'affaire pour le monde du
    131 libre, à moins qu'il ne propose normalement des codecs de remplacement
    132 libres.</p>
    133 
    134 <p>Les applets Java s'exécutent aussi dans le navigateur et soulèvent des
    135 problèmes similaires. En général, n'importe quel système d'applet pose ce
    136 genre de problème. Avoir un environnement d'exécution libre pour un applet
    137 ne fait que déplacer le problème.</p>
    138 
    139 <p>Il est théoriquement possible de programmer en HTML et CSS, mais en pratique
    140 les possibilités sont limitées et c'est assez pénible ; le simple fait de
    141 réaliser quelque chose par cette technique est un hack impressionnant. De
    142 tels programmes doivent être libres, mais aujourd'hui, en 2019, cela ne pose
    143 pas de réel problème pour la liberté de l'utilisateur.</p>
    144 
    145 <p>Un fort mouvement s'est développé qui appelle les sites web à ne communiquer
    146 qu'avec des formats et des protocoles libres (certains disent « ouverts ») ;
    147 c'est-à-dire des formats dont la documentation est publiée et que chacun est
    148 libre de mettre en œuvre. Cependant, la présence de programmes JavaScript
    149 dans les pages web rend ce critère insuffisant. Le langage JavaScript
    150 lui-même, en tant que format, est libre ; utiliser JavaScript dans un site
    151 web n'est donc pas nécessairement mauvais. Cependant, comme nous l'avons vu
    152 plus haut, cela peut être mauvais si le programme JavaScript est non
    153 libre. Quand le site transmet un programme à l'utilisateur, il ne suffit pas
    154 que le programme soit écrit dans un langage documenté et libre d'entraves ;
    155 ce programme doit aussi être libre. « Ne transmet que des programmes libres
    156 aux utilisateurs » ; cette règle doit faire partie des critères définissant
    157 un comportement correct des sites web.</p>
    158 
    159 <p>Le chargement et l'exécution silencieux de programmes non libres est l'un
    160 des nombreux problèmes soulevés par les « applications web ». Le terme
    161 « application web » a été conçu pour ne pas tenir compte de la distinction
    162 fondamentale entre un logiciel fourni aux utilisateurs et un logiciel
    163 s'exécutant sur un serveur. Il peut faire référence à un programme client
    164 spécialisé qui s'exécute dans un navigateur ; il peut faire référence à un
    165 logiciel serveur spécialisé ; il peut faire référence à un programme client
    166 spécialisé travaillant main dans la main avec un logiciel serveur
    167 spécialisé. Les côtés client et serveur soulèvent des problèmes éthiques
    168 différents, bien qu'ils soient si intimement intégrés qu'on pourrait les
    169 considérer comme parties d'un seul et même programme. Cet article ne
    170 s'occupe que du logiciel client. Nous traitons le problème du serveur
    171 séparément.</p>
    172 
    173 <p>Pratiquement, comment pouvons-nous traiter le problème des programmes
    174 JavaScript non triviaux et non libres dans les sites web ? La première étape
    175 est de ne pas les laisser s'exécuter.</p>
    176 
    177 <p>Que voulons-nous dire par « non trivial » ? Puisque c'est une question
    178 d'interprétation, il s'agit de concevoir un critère simple qui donne de bons
    179 résultats, plutôt que de déterminer la seule réponse correcte.</p>
    180 <p>
    181 Actuellement, nous considérons un programme JavaScript comme non trivial
    182 s'il répond à l'une des conditions suivantes :</p>
    183 
    184 <ul>
    185   <li>il est appelé en tant que script externe (à partir d'une autre page) ;</li>
    186 
    187   <li>il déclare un tableau contenant plus de 50 éléments ;</li>
    188 
    189   <li>il définit une entité nommée (fonction ou méthode) qui appelle autre chose
    190 qu'une primitive ;</li>
    191 
    192   <li>il définit une entité nommée comprenant plus de trois éléments de
    193 construction conditionnels et une construction en boucle ;</li>
    194 
    195   <li>le code n'appartenant pas aux définitions nommées appelle autre chose que
    196 des primitives et des fonctions définies plus haut dans la page ;</li>
    197 
    198   <li>le code n'appartenant pas aux définitions nommées comprend, au total, plus
    199 de trois éléments de construction conditionnels et une construction en
    200 boucle ;</li>
    201 
    202   <li>il fait appel à <b>eval</b> ;</li>
    203 
    204   <li>il fait des requêtes Ajax ;</li>
    205 
    206   <li>Pour accéder de manière dynamique aux propriétés des objets, il utilise une
    207 notation crochet qui ressemble à <b><em>objet</em>[<em>propriété</em>]</b>.</li>
    208 
    209   <li>il modifie le <abbr title="Document Object Model">DOM</abbr> ;</li>
    210   
    211   <li>il utilise des constructions dynamiques JavaScript qui sont difficiles à
    212 analyser sans interpréter le programme, ou bien il est chargé en même temps
    213 que des scripts qui utilisent de telles constructions ; cela concerne plus
    214 précisément l'utilisation avec certaines méthodes (<b>Obj.write</b>,
    215 <b>Obj.createElement</b>, etc.) de tout élément de construction autre qu'une
    216 chaîne de caractères constante.</li>
    217 </ul>
    218 
    219 <p>Comment savoir si du code JavaScript est libre ? Dans un <a
    220 href="/licenses/javascript-labels.html">autre article</a>, nous proposons
    221 une méthode qui permet à un programme JavaScript non trivial inclus dans une
    222 page web d'indiquer l'URL de son code source, ainsi que sa licence, en
    223 utilisant des commentaires stylisés.</p>
    224 
    225 <p>Enfin, nous devons modifier les navigateurs pour qu'ils détectent et
    226 bloquent le JavaScript non trivial et non libre dans les pages web. Le
    227 programme <a href="/software/librejs/">LibreJS</a> [en] détecte le
    228 JavaScript non libre et non trivial dans les pages que vous visitez, et le
    229 bloque. LibreJS est intégré à IceCat et peut être ajouté à Firefox en tant
    230 que module complémentaire.</p>
    231 
    232 <p>Les utilisateurs de navigateurs ont aussi besoin d'une fonctionnalité facile
    233 d'emploi, indiquant le code JavaScript à <em>substituer</em> au JavaScript
    234 d'une page donnée (le code spécifié pourrait être un remplacement total, ou
    235 une version modifiée du programme JavaScript libre de cette
    236 page). Greasemonkey arrive presque à le faire, mais pas tout à fait, car il
    237 ne garantit pas de modifier le code JavaScript d'une page avant que le
    238 programme ne commence à s'exécuter. On peut utiliser un proxy local, mais
    239 c'est trop malcommode actuellement pour constituer une réelle solution. Nous
    240 avons besoin de construire une solution fiable et pratique, ainsi que des
    241 sites pour partager les modifications. Le projet GNU voudrait recommander
    242 les sites dédiés exclusivement aux modifications libres.</p>
    243 
    244 <p>Ces fonctionnalités rendront possible pour un programme JavaScript inclus
    245 dans une page web d'être réellement libre. JavaScript ne sera plus un
    246 obstacle particulier à notre liberté – pas plus que C et Java ne le sont
    247 maintenant. Nous serons en mesure de rejeter et même de remplacer les
    248 programmes JavaScript non triviaux et non libres, tout comme nous avons
    249 rejeté et remplacé les paquets non libres pour les installations
    250 classiques. Notre campagne pour libérer le code JavaScript des sites web
    251 pourra alors commencer.</p>
    252 
    253 <p>Entre-temps, il existe un cas où il est acceptable d'exécuter un programme
    254 JavaScript non libre : l'envoi d'une réclamation aux opérateurs du site web
    255 leur demandant de libérer le code JavaScript de leur site, ou bien de
    256 l'éliminer. N'hésitez pas à activer JavaScript temporairement pour faire ça
    257 – mais n'oubliez pas de le désactiver après coup.</p>
    258 
    259 <!-- any links that used to point to the appendices should point to
    260      free-your-javascript.html instead.  -->
    261 <div class="announcement">
    262 <hr class="no-display" />
    263 <p>À l'attention des webmestres : il y a <a
    264 href="/software/librejs/free-your-javascript.html">plusieurs moyens</a>
    265 d'indiquer la licence des programmes JavaScript présents sur un site web.</p>
    266 <hr class="no-display" />
    267 </div>
    268 
    269 <p><strong>Remerciements:</strong> Je remercie <a
    270 href="/people/people.html#mattlee">Matt Lee</a> et <a
    271 href="https://johnresig.com/">John Resig</a> pour leur aide dans la
    272 définition de notre proposition de critère, et David Parunakian pour avoir
    273 porté ce problème à mon attention.</p>
    274 </div>
    275 
    276 <div class="translators-notes">
    277 
    278 <!--TRANSLATORS: Use space (SPC) as msgstr if you don't have notes.-->
    279 <hr /><b>Notes de traduction</b> <ol>
    280 <li id="TransNote1"><a href="#TransNote1-rev"
    281 class="nounderline">&#8593;</a> également appelés « logiciels
    282 propriétaires ».<br/><br/></li>
    283 </ol></div>
    284 </div>
    285 
    286 <!-- for id="content", starts in the include above -->
    287 <!--#include virtual="/server/footer.fr.html" -->
    288 <div id="footer" role="contentinfo">
    289 <div class="unprintable">
    290 
    291 <p>Veuillez envoyer les requêtes concernant la FSF et GNU à &lt;<a
    292 href="mailto:gnu@gnu.org">gnu@gnu.org</a>&gt;. Il existe aussi <a
    293 href="/contact/">d'autres moyens de contacter</a> la FSF. Les liens
    294 orphelins et autres corrections ou suggestions peuvent être signalés à
    295 &lt;<a href="mailto:webmasters@gnu.org">webmasters@gnu.org</a>&gt;.</p>
    296 
    297 <p>
    298 <!-- TRANSLATORS: Ignore the original text in this paragraph,
    299         replace it with the translation of these two:
    300 
    301         We work hard and do our best to provide accurate, good quality
    302         translations.  However, we are not exempt from imperfection.
    303         Please send your comments and general suggestions in this regard
    304         to <a href="mailto:web-translators@gnu.org">
    305 
    306         &lt;web-translators@gnu.org&gt;</a>.</p>
    307 
    308         <p>For information on coordinating and contributing translations of
    309         our web pages, see <a
    310         href="/server/standards/README.translations.html">Translations
    311         README</a>. -->
    312 Merci d'adresser vos commentaires sur les pages en français à &lt;<a
    313 href="mailto:trad-gnu@april.org">trad-gnu@april.org</a>&gt;, et sur les
    314 traductions en général à &lt;<a
    315 href="mailto:web-translators@gnu.org">web-translators@gnu.org</a>&gt;. Si
    316 vous souhaitez y contribuer, vous trouverez dans le <a
    317 href="/server/standards/README.translations.html">guide de traduction</a>
    318 les infos nécessaires.</p>
    319 </div>
    320 
    321 <!-- Regarding copyright, in general, standalone pages (as opposed to
    322      files generated as part of manuals) on the GNU web server should
    323      be under CC BY-ND 4.0.  Please do NOT change or remove this
    324      without talking with the webmasters or licensing team first.
    325      Please make sure the copyright date is consistent with the
    326      document.  For web pages, it is ok to list just the latest year the
    327      document was modified, or published.
    328      
    329      If you wish to list earlier years, that is ok too.
    330      Either "2001, 2002, 2003" or "2001-2003" are ok for specifying
    331      years, as long as each year in the range is in fact a copyrightable
    332      year, i.e., a year in which the document was published (including
    333      being publicly visible on the web or in a revision control system).
    334      
    335      There is more detail about copyright years in the GNU Maintainers
    336      Information document, www.gnu.org/prep/maintain. -->
    337 <p>Copyright &copy; 2009-2013, 2016-2019, 2021 Richard Stallman</p>
    338 
    339 <p>Cette page peut être utilisée suivant les conditions de la licence <a
    340 rel="license"
    341 href="http://creativecommons.org/licenses/by-nd/4.0/deed.fr">Creative
    342 Commons attribution, pas de modification, 4.0 internationale (CC BY-ND
    343 4.0)</a>.</p>
    344 
    345 <!--#include virtual="/server/bottom-notes.fr.html" -->
    346 <div class="translators-credits">
    347 
    348 <!--TRANSLATORS: Use space (SPC) as msgstr if you don't want credits.-->
    349 Traduction : Cédric Corazza.<br /> Révision : <a
    350 href="mailto:trad-gnu&#64;april.org">trad-gnu&#64;april.org</a></div>
    351 
    352 <p class="unprintable"><!-- timestamp start -->
    353 Dernière mise à jour :
    354 
    355 $Date: 2021/10/11 10:32:11 $
    356 
    357 <!-- timestamp end -->
    358 </p>
    359 </div>
    360 </div>
    361 <!-- for class="inner", starts in the banner include -->
    362 </body>
    363 </html>