web-dev-qa-db-fra.com

Obscurcir le code JavaScript

Certains développeurs Flash ont peur de JavaScript. Leur point de vue:

Voler le code source de JS est sans effort, il suffit de "voir la source" et de le copier. Oui, vous pouvez décompiler le bytecode Flash, mais cela nécessite plus de temps et de connaissances. En conséquence, JavaScript n'est pas adapté au développement de logiciels commerciaux, car les concurrents voleront le code et mettront le développeur d'origine à la faillite.

L'obscurcissement du code JavaScript a-t-il un sens lors du développement d'applications Web commerciales?

Existe-t-il des techniques d'obscurcissement qui fonctionnent réellement? Les grandes entreprises comme Google masquent-elles le code de leur application Web? Par exemple, Gmail ou Google Drive sont-ils protégés d'une manière ou d'une autre?

17
hidarikani

Je pense que le mot clé dans la question ici est "peur". L'aversion est basée sur la peur, pas sur les faits. La réalité est que le modèle de menace n'est pas particulièrement réaliste. Les entreprises commerciales de développement de logiciels Web utilisent presque universellement JavaScript ces jours-ci, obscurci ou autrement, et je vous mets au défi de me trouver un seul exemple de celui qui a vu son JS volé par un concurrent puis mis hors service à cause de cela. Je suis tout à fait convaincu que cela ne s'est pas produit, et ce n'est probablement pas trop.

Trop votre deuxième question, des entreprises comme Google masquent-elles leur JavaScript? Oui, mais pas pour la sécurité! Ils brouillent pour minimiser la taille du code, afin de réduire la taille du téléchargement et de minimiser les temps de chargement des pages. (Voir le Google Closure Compiler .) Ce n'est pas nécessairement ainsi que vous brouilleriez pour la sécurité car le seul objectif est de minimiser le nombre d'octets qui doivent être remis au client. C'est ce sur quoi vous devriez vous concentrer avec JavaScript, sans vous soucier de savoir si quelqu'un pourra le lire ou non.

24
Xander

Non. Obscurcir Javascript n'a généralement aucun sens. Supposez toujours que toute logique que vous placez du côté client peut facilement être obtenue par une attaque suffisamment déterminée, quelle que soit la manière dont vous l'obscurcissez.

Votre logique "importante" doit être stockée côté serveur.

9
user10211

Vous semblez déjà savoir que l'obscurcissement n'est pas une protection réelle, donc je ne vais pas vous faire la leçon la sécurité par l'obscurité .

Ce qui est logique est le suivant: mettez votre code concurrent sur le serveur pour le protéger, alors obscurcissez le code côté client autant que vous le souhaitez. Certes, cela ne vous donnera pas beaucoup de sécurité, mais cela dissuadera certainement les enfants de fouiner, et cela créera une impression de sécurité renforcée dans le cadre de théâtre de sécurité . Google le fait avec GMail, Facebook le fait.

En gardant à l'esprit que votre code sera désobfusculé, vous pouvez toujours le masquer dans le cadre de votre processus de génération pour rendre vos clients et utilisateurs plus heureux.

Il existe de nombreux outils que vous pouvez utiliser pour y parvenir: Free Javascript Obfuscator , et JScrambler (commercial) sont deux outils que j'ai utilisés auparavant.

Mise à jour: Après une discussion sur La DMZ , nous avons conclu que oui, Google et Facebook le font, mais probablement uniquement pour la taille et les performances des fichiers et rien ne semble suggérer que cela fait partie du théâtre de la sécurité.

7
Adi

Bien sûr, c'est une peur sans fondement.

Javascript n'est qu'une partie d'un écosystème plus vaste, la marque, l'utilisabilité du site, l'intégrité du site, la réactivité et les effets de réseau sont beaucoup plus importants.

Oui, la minimisation javascript, l'optimisation est bonne à faire, mais pas à cause de ces fins.

Si un concurrent vous vole votre code, vous pouvez aller légalement sur leur queue et tuer leur réputation, mais vont-ils être si stupides (c'est en clair sur leur site aussi)?

Et cet argument peut être fait pour le HTML et les images aussi, vous devez évidemment supprimer tout votre site Web car les gens peuvent le voler.

Personnellement, je ne fais que masquer mon code xxxxpy;) et supprimer les commentaires lol.

4
Andrew Russell

Si le code fonctionne, l'obscurcissement ne vaut rien. Prenez cet exemple:
Avant l'obfuscation:

function say(whatever){
alert(whatever);
}

après:

eval(function(p,a,c,k,e,d){e=function(c){return c};if(!''.replace(/^/,String)){while(c--){d[c]=k[c]
||c}k=[function(e){return d[e]}];e=function(){return'\\w+'};c=1};while(c--){if(k[c]){p=p.replace(ne
w RegExp('\\b'+e(c)+'\\b','g'),k[c])}}return p}('1 3(0){2(0)}',4,4,'whatever|function|alert|say'.sp
lit('|'),0,{}))

Maintenant, peu de gens essaieraient vraiment de comprendre tout ce gâchis, mais s'ils veulent le voler, ils n'ont pas besoin de le faire.

La version obscurcie peut être appelée comme la version originale: say("hi").

Si vous ne savez pas comment la version d'origine est appelée, recherchez la fonction/l'événement où vous obtenez une alerte et vérifiez si elle utilise une fonction personnalisée au lieu de alert, puis utilisez CTRL + F pour trouver cette fonction.

En dernier recours, on analyserait simplement le RegEx, dans mon exemple, la plupart des "occultations" ne sont que des conversions RegEx des noms de fonction en noms réels au moment de l'exécution. Vous avez remarqué 'whatever|function|alert|say'?

1
DividedByZero