Bonne question avec une réponse simple : vous ne pouvez pas !
Javascript est un langage de programmation côté client, il fonctionne donc sur la machine du client, et il n'est donc pas possible de cacher quoi que ce soit au client.
Obfusquer votre code est une bonne solution, mais ce n'est pas suffisant, car, bien que ce soit difficile, quelqu'un pourrait déchiffrer votre code et "voler" votre script.
Il existe quelques moyens de rendre votre code difficile à voler, mais comme je l'ai dit, rien n'est à l'épreuve des balles.
Une idée qui me vient à l'esprit est de restreindre l'accès à vos fichiers js externes depuis l'extérieur de la page dans laquelle vous intégrez votre code. Dans ce cas, si vous avez
<script type="text/javascript" src="myJs.js"></script>
et que quelqu'un essaie d'accéder au monJs.js dans le navigateur, il ne devrait pas avoir accès à la source script.
Par exemple, si votre page est écrite en php, vous pouvez inclure le script via la balise include
et laisser le script décider si c'est le cas. sûr "pour retourner à sa source.
Dans cet exemple, vous aurez besoin du fichier externe "js" (écrit en php) monJs.php :
<?php
$URL = $_SERVER['SERVER_NAME'].$_SERVER['REQUEST_URI'];
if ($URL != "my-domain.com/my-page.php")
die("/\*sry, no acces rights\*/");
?>
// your obfuscated script goes here
qui serait incluse dans votre page principale ma-page.php :
<script type="text/javascript">
<?php include "myJs.php"; ?>;
</script>
De cette manière, seul le navigateur peut voir le contenu du fichier js.
Une autre idée intéressante est qu'à la fin de votre script, vous supprimez le contenu de votre élément dom script, de sorte qu'après l'évaluation de votre code par le navigateur, le code disparaît :
<script id="erasable" type="text/javascript">
//your code goes here
document.getElementById('erasable').innerHTML = "";
</script>
Il ne s'agit là que de simples hacks qui ne peuvent pas, et je ne le soulignerai jamais assez : ne peuvent pas, protéger complètement votre code js, mais qui peuvent certainement énerver quelqu'un qui essaie de "voler" votre code.
Mise à jour :
J'ai récemment découvert un article très intéressant rédigé par Patrick Weid sur la façon de cacher votre code js, et il révèle une approche différente : vous pouvez encoder votre code source dans une image ! Bien sûr, ce n'est pas non plus à l'épreuve des balles, mais c'est une autre façon de faire. clôture que vous pourriez construire autour de votre code.
L'idée sous-jacente à cette approche est que la plupart des navigateurs peuvent utiliser l'élément canvas pour manipuler les pixels des images. Et comme le pixel du canevas est représenté par 4 valeurs (rgba), chaque pixel peut avoir une valeur comprise entre 0 et 255. Cela signifie que vous pouvez stocker un caractère (code ascii actuel) dans chaque pixel. Le reste de l'encodage/décodage est trivial.
Merci, Patrick !
1 votes
Questions connexes : stackoverflow.com/questions/3838908/ , stackoverflow.com/questions/3124063/ .
1 votes
Toute personne ayant une connaissance à moitié décente de JS sera capable de reproduire ce que vous faites de toute façon. A moins que vous ne fassiez quelque chose de vraiment révolutionnaire... Cette question a été traitée de nombreuses fois sur ce site, avec toujours les mêmes réponses...
0 votes
Utiliser Encode.js : encodejs.devincity.com
0 votes
Quel mécanisme utilise encode.js de devincity ? J'ai essayé. Cela fonctionne bien. Est-ce qu'il y a un moyen de le décoder ?
0 votes
Il n'est pas possible de protéger la JS à 100 % contre les regards indiscrets, mais on peut s'en approcher. J'ai développé une méthode assez simple et facile à mettre en œuvre, qui rend pratiquement impossible toute tentative d'intrusion. Elle est basée sur la récupération de JS en tant que chaîne cryptée par mot de passe depuis PHP à l'aide de jQuery.getScript, puis sur le décryptage du JS et son exécution à l'aide de eval(). Le JS crypté n'apparaîtra que dans les outils de développement sous "Network" et vous devez connaître le mot de passe pour le décrypter. La partie la plus délicate est de trouver une manière créative de délivrer et de cacher le mot de passe pour le décryptage du JS.
0 votes
Pour les personnes qui pensent que l'utilisation de jQuery remove() sur le JS du conteneur après le chargement de la page fonctionnera, vous serez toujours en mesure de voir la réponse HTML d'origine dans Developer Tools sous "Network". C'est pourquoi il est préférable de charger le code JavaScript que vous souhaitez protéger de manière dynamique et cryptée. Le niveau de sécurité n'est limité que par votre créativité, mais il ne sera jamais sûr à 100 %.