Question

Je sais qu'il est impossible de cacher le code source, mais, par exemple, si je dois lier un fichier JavaScript de mon CDN vers une page Web et 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>

Maintenant, est possible de cacher de l'utilisateur où le script vient, ou cacher le contenu du script et utiliser encore sur une page web?

Par exemple, en enregistrant dans mon CDN privé qui a besoin d'un mot de passe d'accès aux fichiers, ça marcherait? Dans le cas contraire, ce serait travailler pour obtenir ce que je veux?

Était-ce utile?

La solution

Bonne question avec une réponse simple:! vous ne pouvez pas

Javascript est un langage de programmation côté client, donc il fonctionne sur la machine du client, donc vous ne pouvez pas cacher quoi que ce soit du client.
Dissimuler votre code est une bonne solution, mais il ne suffit pas, parce que, bien qu'il soit difficile, quelqu'un pourrait déchiffrer votre code et « voler » votre script.
Il y a quelques façons de faire votre code difficile d'être volé, mais comme je l'ai dit rien est l'épreuve des balles.

Du haut de ma tête, une idée est de limiter l'accès à vos fichiers js externes à partir de l'extérieur de la page que vous intégrez votre code. Dans ce cas, si vous avez

<script type="text/javascript" src="myJs.js"></script>

et que quelqu'un tente d'accéder à la myJs.js dans le navigateur, il ne devrait pas se voir accorder des accès à la source de script.
Par exemple, si votre page est écrit en php, vous pouvez inclure le script via la fonction include et laisser le script décider si elle est sécurité » pour retourner la source de lui.
Dans cet exemple, vous aurez besoin des "js" externes (écrit en php) fichier myJs.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 inclus dans la page principale my-page.php :

<script type="text/javascript">
    <?php include "myJs.php"; ?>;
</script> 

De cette façon, seul le navigateur pouvait voir le contenu du fichier js.

Une autre idée intéressante est que, à la fin de votre script, vous supprimez le contenu de votre élément de script dom, de sorte qu'après le navigateur évalue votre code, le disparaît code:

<script id="erasable" type="text/javascript">
    //your code goes here
    document.getElementById('erasable').innerHTML = "";
</script>

Ce sont tous de simples hacks qui ne peut pas, et je ne peux pas insister assez sur ce point: ne peut pas, protéger complètement votre code js, mais ils peuvent vous emmerder quelqu'un qui essaie de « voler » votre code.

Mise à jour:

Je suis récemment tombé sur un article très intéressant écrit 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 preuve de balle non plus, mais il est une autre clôture que vous pourriez construire autour de votre code.
L'idée derrière cette approche est que la plupart des navigateurs peuvent utiliser l'élément de toile pour faire la manipulation des pixels sur les images. Et étant donné que le pixel de toile est représenté par 4 valeurs (RVBA), chaque pixel peut avoir une valeur dans la gamme de 0-255. Cela signifie que vous pouvez stocker un caractère (il est de code ascii réelle) dans chaque pixel. Le reste du codage / décodage est trivial.
Merci, Patrick!

Autres conseils

La seule chose que vous pouvez faire est obfuscate votre code pour le rendre plus difficile lire. Peu importe ce que vous faites, si vous voulez que le javascript pour exécuter dans leur navigateur ils doivent avoir le code.

Lire cette . Il a une façon très agréable de cacher votre code à la fois voir la source et de l'outil de débogage tel que Firebug.

De ma connaissance, cela est impossible.

Votre navigateur doit avoir accès aux fichiers JS pour être en mesure de les exécuter. Si le navigateur a accès, puis l'utilisateur du navigateur a également accès.

Si vous mot de passe protéger vos fichiers JS, le navigateur ne sera pas en mesure d'y accéder, en battant le but d'avoir JS en premier lieu.

Juste à côté du haut de ma tête, vous pouvez faire quelque chose comme ça (si vous pouvez créer des scripts côté serveur, qu'il sonne comme vous pouvez):

Au lieu de charger le script comme d'habitude, envoyer une demande d'AJAX à une page PHP (il pourrait être quelque chose, je viens d'utiliser moi-même). Demandez à la localiser le fichier PHP (peut-être sur une partie non publique du serveur), ouvrez-le avec file_get_contents et retour (lire: echo). Le contenu sous forme de chaîne

Lorsque cette chaîne est renvoyée au JavaScript, ont-il créer une nouvelle balise script, remplir son innerHTML avec le code que vous venez de recevoir et joindre l'étiquette à la page. (Vous peut avez des problèmes avec cela;. innerHTML peut ne pas être ce dont vous avez besoin, mais vous pouvez expérimenter)

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

EDIT: Je pensais que vous essayez seulement de cacher le emplacement du script. Ce ne serait évidemment pas beaucoup d'aide si vous essayez de cacher le script lui-même.

Oublie, ce n'est pas faisable.

Peu importe ce que vous essayez cela ne fonctionnera pas. Tout ce qu'un utilisateur doit faire pour découvrir votre code et l'emplacement de c'est de regarder dans l'onglet net Firebug ou de l'utilisation Fiddler pour voir ce que les demandes sont faites.

Google fermeture du compilateur , compresseur YUI , Minify , / Packer / ... etc, sont des options de compression / obscurcissant vos codes JS. Mais aucun d'entre eux peut vous aider de cacher votre code des utilisateurs.

Toute personne ayant une connaissance décente peut facilement décoder / de-obscurcir votre code en utilisant des outils tels que JS Beautifier . Vous le nom.

La réponse est, vous pouvez toujours rendre votre code plus difficile à lire / decode, mais pour assurer qu'il n'y a aucun moyen de se cacher.

Je pense que la seule façon est de mettre les données nécessaires sur le serveur et ne permettent à l'utilisateur connecté pour accéder aux données requises (vous pouvez également faire un certain côté serveur de calculs). Cette wont protège votre code javascript mais faire unoperatable sans le code côté serveur

Comme je l'ai dit dans le commentaire que je quittai sur la réponse gion_13 avant (s'il vous plaît lire), vous ne pouvez vraiment pas. Pas avec javascript.

Si vous ne voulez pas que le code soit disponible côté client (= stealable sans grands efforts), ma suggestion serait d'utiliser PHP (ASP, Python, Perl, Ruby, JSP + Java Servlets) qui est traité côté serveur et seuls les résultats de l'exécution calcul / code sont servis à l'utilisateur. Ou, si vous préférez, même Flash ou Java Applet qui laisse le calcul côté client / exécution de code mais sont compilés et donc plus difficile à inverser moteur (impossible donc).

Juste mes 2 cents.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top