Quelle est la meilleure façon de protéger HTML / CSS / JavaScript propriétaire?

J'écris un moteur de site robuste, évolutif et assez complexe en utilisant HTMl, CSS et JavaScript. Je ne veux pas que cela soit déchiré, et je me demande s'il y a un moyen de protéger la source d'être visionnée dans le client.

Je suis particulièrement préoccupé par le JavaScript, et je me demande si je peux le protéger en l'hébergeant dans des fichiers séparés qui ne peuvent pas être consultés directement. J'ai le contrôle total de mon serveur web, et je peux modifier les paramètres à régler.

Indépendamment de la façon dont vous obscurcir le code, n'importe qui peut reproduire ce que vous faites en le voyant juste. Cela pourrait prendre un peu plus longtemps pour l'écrire à partir de zéro, mais il n'y a pas grand chose à faire à ce sujet.

Vos seules options réelles de protection impliquent le droit d'auteur sur le code et, éventuellement, le dépôt d'un brevet. Si ce que vous faites est vraiment différent, alors un brevet est probablement le meilleur moyen d'y aller.

Généralement, la valeur de votre application va vraiment être dans la zone de support. En d'autres termes, les gens l'achèteront s'ils estiment que vous allez être assez longtemps pour le supporter. Soyez conscient de cela car vous le prix.

Vous allez trouver qu'il y en aura qui vont simplement voler votre code et le réutiliser. Ne vous inquiétez pas trop d'eux car ils ne paieraient pas les clients de toute façon. Au lieu de cela, rendez-vous facile pour vos clients d'acheter et d'utiliser vos affaires. Assurez-vous de fournir un soutien; C'est d'où viendra la valeur réelle.

Faites exactement l'inverse, relâchez votre code en tant que source publique avec une licence MIT / GPL. Joignez votre nom (commercial) au code et soyez connu comme le premier à créer une application X. La réputation vous amène beaucoup plus loin que les tentatives futiles de "protéger votre code".

  1. JS / Html / CSS est généralement assez facile à créer en arrière, ils n'ont pas besoin de regarder votre code du tout.
  2. Les chances sont que vos innovations JS existent déjà et ont été écrites en 2001 par quelqu'un d'autre.
  3. Plus le code est complexe, plus il est difficile de voler la propriété intellectuelle, surtout si vous l'ouvrez.

Il n'y a vraiment pas de raison sage de protéger votre code en ce qui concerne JS / CSS / HTML. Le meilleur que vous pouvez faire est de protéger votre logique métier en gardant cela sur le backend.

Premier exemple, je pourrais écrire ma propre mise en œuvre de CKEditor (beaucoup de gens font exactement cela) mais il est beaucoup plus facile d'utiliser CKEditor et tout le monde sait ce que c'est, qui l'a écrit …

Ou prenez les google maps comme exemple, il y a beaucoup de clones, mais il n'y a qu'une seule carte google réelle. Heck, d'autres ont écrit une implémentation de cartes avant Google, mais Google Maps est plus connu.

Je pourrais continuer avec beaucoup d'exemples, pourquoi essayer de protéger votre code n'est pas seulement idiot, mais pas intelligent … La protection de la logique métier est une chose, mais vous avez en fait plus à gagner en vous rendant public avec un code fantaisiste. .

Non … tu ne peux pas faire ça.

Tout va au navigateur (le client). Vous pouvez obscurcir uglify, minify ou whatnot with it, mais à la fin, il est facile de "chiffrer" à nouveau.

Vous ne pouvez pas le cacher non plus, car vous souhaitez que le navigateur soit reçu de toutes vos sources. Donc, même si vous faites du déménagement funky, "charger javascript avec une insertion de balise de script dynamique et supprimer ensuite les balises de script". Eh bien, cela pourrait fonctionner pour certains utilisateurs inexpérimentés, mais l'utilisation d'un outil comme Fiddler montrera la vérité à nouveau.

Vous ne pouvez tout simplement pas le faire. Obfuscating votre javascript et CSS avec un minimiseur est probablement le plus proche que vous pouvez obtenir.

Eh bien, la réponse populaire sera "ne pas le mettre sur le web". Cependant, vous pouvez nuire à votre javascript tellement que, généralement, personne ne dérangera de le voler. L'enlèvement de la fonction et les noms de variables et similaires vont très loin. Généralement, il sera plus facile de commencer à partir de rien.

Minimiser votre HTML, CSS et JavaScript aidera un petit peu, mais les gens peuvent toujours reformater ceux-ci. Votre meilleur pari est que si le contenu envoyé aux clients n'est pas le même que le contenu original avec lequel vous travaillez.

Cela peut être réalisé par:

  • Générer votre HTML à partir d'un cadre
  • Générant votre CSS via SASS / LESS , etc.
  • En utilisant un compilateur JavaScript sur vos scripts (c.-à-d. Le compilateur de fermeture de Google)

Cependant, avec tous ceux, il n'y a que jusqu'à présent que vous pouvez aller. La compilation de votre JavaScript rendra plus difficile de suivre vos intentions initiales, mais probablement pas assez difficile si quelqu'un s'efforce de l'ingénierie inverse.

Vous ne pouvez ni le mettre sur Internet, ni le maintenir accessible uniquement via un intranet; Mais il n'y a aucun moyen d'empêcher de façon fiable le client d'accéder au html / css / JS, sans les empêcher d'accéder au site lui-même.

L'obfuscation dissuadera les tentatives occasionnelles et la navigation par curiosité, mais n'empêchera pas un attaquant / navigateur déterminé, car tout est mis en œuvre sur le côté client.

Vous pouvez utiliser un obfuscator JavaScript. Cela rendra le code difficile à lire. Ils peuvent toujours "l'arracher", mais il serait très difficile de le comprendre et donc de le modifier. Il n'y a aucun moyen de cacher complètement le code.

J'ai beaucoup pensé à ce problème et, franchement, il n'y a pas grand chose à faire. Le meilleur que j'ai rencontré est l'utilisation d'un compilateur JS.

Théoriquement, et je n'ai jamais réussi à le faire, mais je sais qu'il est possible , il est possible de charger vos js à travers un swf 1×1 pixel qui a été envoyé à travers un brouilleur. Il est encore possible de contourner cela, mais cela devient beaucoup plus ennuyeux. Ensuite, vous pouvez envoyer un code crypté vers le swf, décrypter le côté client (en utilisant les bibliothèques as3crypt), puis l'écrire sur le navigateur. Cela dit, à moins que vous n'utilisiez le swf pour une série de rappels, vous auriez toujours le problème du fait qu'il faudrait encore écrire sur le navigateur . Firebug et les consoles js d'autres navigateurs permettraient à l'utilisateur d'obtenir les js "compilés". Bien sûr, il est possible de script AS3 d'enregistrer la série de rappels …

Comme je l'ai dit, cela est plus hypothétique que non et, bien que je ne doute pas que cela pourrait fonctionner dans des situations idylliques, Flash est limité et vous auriez besoin de connaissances sur AS3. L'avantage, bien sûr, est que c'est un moyen d'obtenir js sur le navigateur sans que l'utilisateur puisse le lire facilement.

Je suis totalement en désaccord avec l'argument selon lequel c'est une perte de temps à essayer de protéger JavaScript. Il existe un certain nombre de techniques que j'ai appris pour protéger mon propre produit au cours des années (les meilleures sont plus de méthodes pour tromper les utilisateurs en pensant qu'ils ont réussi à voler des logiciels, plutôt que des mécanismes techniques), ce qui supprime 99% de la copie. Je suis également en désaccord avec quelqu'un qui suggère la solution est d'ouvrir le logiciel, tout le monde dans ce groupe a probablement l'expérience commerciale exclusive d'être responsable de la quantité d'argent qu'un tel produit logiciel produit. Juste parce que les gens peuvent voler votre logiciel n'est pas un argument pour dire "oh bien" et il suffit de leur donner, les zélateurs open source sont désespérément naïfs à cet égard.

Je ne crois pas vraiment qu'il soit possible de cacher le code JavaScript de l'utilisateur final, JavaScript est fait côté client, pas le côté serveur, cela signifie qu'il est mieux de visualiser le code source en texte clair ou d'avoir un programme tiers intercepter le navigateur, l'utilisateur final, Nécessite le code pour compléter la tâche.

Même s'il est chiffré, à un moment donné, il va falloir ne pas être chiffré pour que le navigateur puisse compléter et afficher la tâche, où l'utilisateur final obtiendra le code, sauf si vous avez un contrôle total et total sur l'utilisateur final L'ordinateur cachant tout code qui est exécuté côté client serait impossible.