Comment compacter ou encrypter un programme Javascript

Normalement, dans l’esprit d’ouverture qui a fait le succès du web, il n’est pas recommandé de camoufler, cacher ou encrypter son code HTML, CSS ou Javascript, de façon à ce que l’on puisse tous apprendre les uns des autres juste en regardant le code d’une page. Pour des raisons pratiques de gestion, il est aussi difficile de travailler avec une page HTML qui contient deux versions, l’une lisible, et l’autre encryptée, d’une façon ou d’une autre.

Mais il arrive parfois que vous créez une application particulièrement ingénieuse ou divertissante en Javascript, et que vous voyez venir les copieurs avaricieux des milles à la ronde. Une fois publié, il est difficile de protéger un tel travail, plus difficile, probablement, que de protéger un article.

Il existe des programmes de réduction et de compression de code javascript qui peuvent être utilisés en même temps pour camoufler votre code et leur rendre plus difficile à copier.

Petite note avant de poursuivre: il est primordiale que vous gardiez en tout temps une version originale de votre code avant de le transformer avec les compacteurs et réducteurs suivants, parce qu’une fois réduit ou encrypté, on ne peut revenir en arrière et votre code ne sera probablement plus éditable.

Si vous être juste intéressés à optimiser votre code javascript pour réduire le temps de téléchargement (ce qui peut être une bonne idée si votre programme est gros), il existe quelques solutions qui prennent soin d’enlever tout les espaces superflus du programme (et plus, pour certains), mais sans encrypter le contenu, ce qui le garde relativement lisible: JSMin, ShrinkSafe ou YUI Compressor, de Yahoo!.

Mon choix préféré, par contre, est /packer/ par Dean Edwards. Cet outil est utilisable en-ligne, c’est-à-dire à même la page web, et il offre plusieurs niveaux de compactage, de la simple réduction des espaces blancs, comme dans les solutions mentionnées précédemment, à l’encodage de type Base62 qui vous permets d’encrypter complètement votre programme (n’oubliez toujours pas, une copie de sauvegarde pour l’originale est de mise!), de façon à le rendre incompréhensible pour le commun des mortels.

Exemple, ce code qui vérifie si votre page web n’est pas contenue dans une frame et, si c’est le cas, la débloque:

if (window != top) top.location.href = location.href;

Devient:

eval(function(p,a,c,k,e,r){e=String;if(!''.replace(/^/,String)){while(c--)r[c]=k[c]||c;k=[function(e){return r[e]}];e=function(){return'\\w+'};c=1};while(c--)if(k[c])p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c]);return p}('4(3!=0)0.1.2=1.2;',5,5,'top|location|href|window|if'.split('|'),0,{}))

Une fois votre code javascript compacté ou encrypté, sauvegardez votre page HTML originale sous un autre nom, et remplacez le code original avec le nouveau dans la page qui sera publique.

Si, malgré tout, il y a encore des copieurs qui profitent de votre code, il existe une façon de contourner ce problème en redirigeant les visiteurs vers votre site. Comme le code encrypté ne peut être modifié, les copieurs ne pourront pas tout simplement effacer les instructions de redirection.

Au début de votre programme, ajoutez ceci, en remplaçant l’adresse (example.com) par la votre:

if ((location.host) && (location.host != "www.example.com")) {
top.location.href = "http://www.example.com/";
}

Si vote programme, une fois copié, détecte qu’il ne fonctionne pas sous votre nom de domaine original, il redirigera le visiteur vers votre site. Vous pouvez aussi décider de rediriger le visiteur vers la page individuelle qui contient votre programme.

Une fois votre programme Javascript modifié, vous n’avez qu’à le recompacter et mettre à jour votre page publique.

Ajout 5 novembre 2009

Google vient de sortir une nouvelle application (exécutable Java ou web) pour optimiser le code javascript appellée: Closure Compiler.

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *