76 votes

Comment protéger les fichiers javascript ?

Je sais qu'il est impossible de cacher le code source mais, par exemple, si je dois lier un fichier JavaScript de mon CDN à une page web et que je ne veux pas que les gens connaissent l'emplacement et/ou le contenu de ce script, est-ce possible ?

Par exemple, pour lier un script à partir d'un site web, nous utilisons :

<script type="text/javascript" src="http://somedomain.com/scriptxyz.js">
</script>

Est-il possible de cacher à l'utilisateur l'origine du script, ou de cacher le contenu du script tout en l'utilisant sur une page web ?

Par exemple, en l'enregistrant dans mon CDN privé qui nécessite un mot de passe pour accéder aux fichiers, cela fonctionnerait-il ? Si ce n'est pas le cas, que faudrait-il faire pour obtenir ce que je veux ?

1 votes

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

106voto

gion_13 Points 15594

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 !

0 votes

Ajouter quelque chose : Je jure que j'ai vu ceci, ce que je demande dans deux sites différents, tous les deux de Social Video Downloading, ILS ont OBVIENNEMENT utilisé javascript dans l'un et PHP dans l'autre, mais dans les deux, quand vous regardez le code source, il n'y a que le code pour le formulaire où vous entrez l'URL et rien de plus, aucun appel script, même quand ils utilisaient SWFObject pour lire les vidéos dans le JWplayer. Je ne me souviens plus des noms, mais ils étaient là :S

0 votes

@Jmlevick la partie php était juste un exemple...je suis sûr qu'elle peut être implémentée dans la plupart des langages côté serveur.

0 votes

Si je comprends bien vos intentions, je pense que include "getCallerUrl.php"; devrait être include "myJs.php"; n'est-ce pas ?

14voto

GWW Points 20316

La seule chose que vous pouvez faire est obscurcir votre code pour le rendre plus difficile à lire. Quoi que vous fassiez, si vous voulez que le javascript s'exécute dans leur navigateur, ils devront avoir le code.

7voto

Lee Points 84

Lire la suite . Il a une façon très agréable de cacher votre code à la fois dans la vue source et dans les outils de débogage tels que firebug.

4voto

sdleihssirhc Points 18791

De mémoire, vous pourriez faire quelque chose comme ça (si vous pouvez créer des scripts côté serveur, ce qui semble être le cas) :

Au lieu de charger le script comme d'habitude, envoyez une requête AJAX à une page PHP (cela peut être n'importe quoi ; je l'utilise moi-même). Demandez à PHP de localiser le fichier (peut-être sur une partie non publique du serveur), de l'ouvrir avec file_get_contents et le retour (lire : echo ) le contenu sous forme de chaîne de caractères.

Lorsque cette chaîne est renvoyée au JavaScript, demandez-lui de créer un nouveau fichier script remplir sa balise innerHTML avec le code que vous venez de recevoir, et attachez la balise à la page. (Vous pourrait ont des difficultés avec cela ; innerHTML n'est peut-être pas ce dont vous avez besoin, mais vous pouvez expérimenter).

Si vous faites cela souvent, vous pouvez même mettre en place une page PHP qui accepte une variable GET avec le nom du script, de sorte que vous pouvez dynamiquement récupérer différents script en utilisant le même PHP. (Vous pourriez peut-être utiliser POST à la place, pour rendre un peu plus difficile pour les autres personnes de voir ce que vous faites. Je ne sais pas).

EDITAR: Je pensais que vous essayiez seulement de cacher le emplacement du script. Cela n'est évidemment pas très utile si vous essayez de cacher le script lui-même.

3voto

darioo Points 23903

À ma connaissance, ce n'est pas possible.

Votre navigateur doit avoir accès aux fichiers JS pour pouvoir les exécuter. Si le navigateur y a accès, l'utilisateur du navigateur y a également accès.

Si vous protégez vos fichiers JS par un mot de passe, le navigateur ne pourra pas y accéder, ce qui va à l'encontre du but recherché.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X