JavaScript non libre sur des sites web ?!

4 replies [Last post]
Mark
Offline
Joined: 04/14/2012

Bonjour,

Je viens de lire un article sur Le piège JavaScript.

Il y a certaines choses qui me paraissent floues...

1) On parle de code JavaScript sur une page web ? Du genre un :
alert('Hello world !\n');

2) En gros le projet a pour but de remplacer le code JavaScript d'un site web par un autre ?
Si je créer un script utile dont le but n'est pas d'espionner mes utilisateurs, mon script sera remplacé par celui d'une autre personne ? Pardonnez mon audace mais c'est débile !!
Je veux dire qu'une personne mal intentionnée pourrait faire exécuter un script à mes visiteurs à la place du miens.

Ce projet pourrais être très problématique pour une entreprise de service dont le concurrent modifie le code source de son script JS.

Je ne suis pas sûr d'avoir tout compris...

GNU IceCat bloque par défaut le JavaScript non libre et non trivial (je ne suis pas sûr de savoir ce qu'est un script trivial). Donc certaines parties d'un site web pourraient être paralysée ?

Merci de vos réponses.

Magic Banana

I am a member!

Offline
Joined: 07/24/2010

1) L'exemple que tu donnes est du JavaScript trivial. La définition (actuelle : c'est un concept assez subjectif) de "non-trivial" est indiquée sur la page que tu nous mentionnes :

  • il fait une requête Ajax ou est chargé en même temps que des scripts qui font des requêtes Ajax,
  • il charge des scripts externes de manière dynamique, ou bien est chargé en même temps que des scripts qui le font,
  • il définit des fonctions ou des méthodes et charge un script externe (à partir de l'HTML) ou bien est chargé comme tel,
  • 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. Ces constructions sont :
    • l'utilisation de la fonction eval,
    • l'appel à des méthodes via la notation crochets,
    • l'utilisation avec certaines méthodes (Obj.write, Obj.createElement, etc.) de tout élément de construction autre qu'une chaîne de caractères constante.

2) L'idée est avant tout de détecter et de bloquer le JavaScript non-trivial et non-libre (le JavaScript s'exécute dans le navigateur Web, pas dans le serveur; c'est un programme comme un autre). Comme tu l'as compris, cela "paralyse" une partie du site. Peut-être au point de le rendre inutilisable. C'est pourquoi il est utile de remplacer le JavaScript non-libre. L'extension GreaseMonkey permet cela. Par exemple, j'utilise ViewTube (un script GreaseMonkey) pour remplacer les lecteur vidéos privateur en Flash ou JavaScript par un lecteur libre.

Réaliser ce travail de remplacement en communauté serait probablement plus efficace. D'où l'idée d'un serveur distribuant automatiquement le code libre de substitution. Bien sûr l'utilisateur pourra choisir (ou non) d'utiliser un serveur donné.

Ce que tu ne sembles pas avoir compris, c'est que le JavaScript non-trivial peut être libre ! De façon analogue à ce qui est pratiqué pour les applications lourdes, il suffit de distribuer une licence libre avec le logiciel. Celui qui écrit du JavaScript doit, pour que ce dernier soit éthique, indiquer la licence (par exemple la GNU GPL) correctement. L'annexe A explique comment : https://www.gnu.org/philosophy/javascript-trap.html

Si le JavaScript est libre, il n'est pas nécessaire de le remplacer.

Épona Lug Catubodua
Offline
Joined: 05/07/2014

Je n'ai pas compris ce que trivial et non trivial veulent dire.
Donner les 4 liberté fondamentale n'est pas suffisant pour expliqué ce qu'est un logiciel libre, il faut expliquer et pas uniquement par la technique, c'est ce qu'on fait en général dans toute les explications de ce qu'est un logiciel libre. Et là, pour savoir ce qui est trivial et ce qui ne l'est pas, on n'a que le critère technique, rien autour. Je ne connais pas Eval, pour le reste, techniquement, j'ai au minimum une idée de quoi il s'agit, mais je ne comprends quand même pas de quoi il s'agit. Pourriez-vous définir les enjeux de la trivialité en terme non technique autant que possible afin de pouvoir apréhender ce concepte?
D'avance, merci.

Magic Banana

I am a member!

Offline
Joined: 07/24/2010

"Trivial" signifie "banal". "Non-trivial" signifie donc "pas banal". Comme je l'explique plus haut, la trivialité est subjective et la FSF propose une définition précise lorsqu'il s'agit de code JavaScript : https://www.gnu.org/philosophy/javascript-trap.fr.html

Beaucoup de JavaScript est trivial. Il ne s'agit que de quelques lignes que n'importe quel programmeur peut comprendre/écrire en quelques minutes. Par exemple pour définir le comportement d'un menu sur une page Web. Il n'y a donc pas de raison de considérer que l'exécution de ce code enfreint nos libertés fondamentales.

Au contraire, si le code est non-trivial alors là, oui, il est essentiel qu'il soit distribué selon les termes d'une licence de logiciel libre pour que l'utilisateur soit en mesure de l'étudier (remarque que les gros programmes en JavaScript sont souvent minimisés, par exemple les variables sont automatiquement remplacées par des variables de quelques lettres, et le code source devient illisible, c'est à dire que l'on est pas bien plus avancé qu'avec un binaire), de le modifier et de le redistribuer (modifié ou non).

Bref, ce sont bien toujours les libertés qui importent. Plus précisément, ce sont les libertés dans la pratique et pas seulement en théorie. À cet égard, les programmes triviaux ne posent pas de problème.

Épona Lug Catubodua
Offline
Joined: 05/07/2014

Merci pour cette explication.