web-dev-qa-db-fra.com

Comment masquer le code javascript dans une page Web?

Est-il possible de masquer le code Javascript du code HTML d'une page Web, lorsque le code source est visualisé par le biais de la fonctionnalité Afficher la source du navigateur?

Je sais qu'il est possible de masquer le code, mais je préférerais qu'il soit caché à partir de la fonctionnalité d'affichage de la source.

80
arun nair

Je ne suis pas sûr que quiconque ait réellement répondu à votre question concernant le code affiché à partir de la commande Afficher la source du navigateur.

Comme d’autres l’ont dit, il n’existe aucun moyen de protéger javascript dans un navigateur à partir d’un visualiseur déterminé. Si le navigateur peut l'exécuter, toute personne déterminée peut également le voir/l'exécuter.

Mais, si vous mettez votre javascript dans un fichier javascript externe, fourni avec:

<script type="text/javascript" src="http://mydomain.com/xxxx.js"></script>

balises, le code javascript ne sera pas immédiatement visible avec la commande Afficher la source - seule la balise de script elle-même sera visible de cette façon. Cela ne veut pas dire que quelqu'un ne peut pas simplement charger ce fichier javascript externe pour le voir, mais vous avez demandé comment le garder en dehors de la commande Afficher la source du navigateur, ce que vous allez faire.

Si vous voulez vraiment faire plus de travail pour voir la source, vous feriez tout ce qui suit:

  1. Mettez-le dans un fichier externe .js.
  2. Obfusquez le fichier de façon à ce que la plupart des noms de variables natifs soient remplacés par des versions abrégées, de sorte que tous les espaces inutiles soient supprimés, de sorte qu'il ne puisse pas être lu sans traitement supplémentaire, etc.
  3. Incluez dynamiquement le fichier .js en ajoutant par programme des balises de script (comme le fait Google Analytics). Cela rendra encore plus difficile l’accès au code source à partir de la commande Afficher la source, car il n’y aura pas de lien facile pour cliquer dessus.
  4. Mettez autant de logique intéressante que vous souhaitez protéger sur le serveur que vous récupérez via des appels ajax plutôt que d'effectuer un traitement local.

Cela dit, je pense que vous devriez vous concentrer sur les performances, la fiabilité et la qualité de votre application. Si vous devez absolument protéger un algorithme, placez-le sur le serveur, mais en dehors de cela, faites concurrence à ce que vous faites de mieux, sans avoir de secrets. C'est finalement comment le succès fonctionne sur le web de toute façon.

113
jfriend00

Non, ce n'est pas possible.

Si vous ne le donnez pas au navigateur, celui-ci ne l'a pas.

Si vous le faites, alors (ou une référence facile à suivre) fait partie de la source.

35
Quentin

Utilisez HTML Encrypter La partie de la tête qui a

<link rel="stylesheet" href="styles/css.css" type="text/css" media="screen" />
<script type="text/javascript" src="script/js.js" language="javascript"></script>

copy and paste it to HTML Encrypter and the Result will goes like this
and paste it the location where you cut the above sample

<Script Language='Javascript'>
<!-- HTML Encryption provided by iWEBTOOL.com -->
<!--
document.write(unescape('%3C%6C%69%6E%6B%20%72%65%6C%3D%22%73%74%79%6C%65%73%68%65%65%74%22%20%68%72%65%66%3D%22%73%74%79%6C%65%73%2F%63%73%73%2E%63%73%73%22%20%74%79%70%65%3D%22%74%65%78%74%2F%63%73%73%22%20%6D%65%64%69%61%3D%22%73%63%72%65%65%6E%22%20%2F%3E%0A%3C%73%63%72%69%70%74%20%74%79%70%65%3D%22%74%65%78%74%2F%6A%61%76%61%73%63%72%69%70%74%22%20%73%72%63%3D%22%73%63%72%69%70%74%2F%6A%73%2E%6A%73%22%20%6C%61%6E%67%75%61%67%65%3D%22%6A%61%76%61%73%63%72%69%70%74%22%3E%3C%2F%73%63%72%69%70%74%3E%0A'));
//-->

HTML CRYPTER Remarque: si vous avez un script Java sur votre page, essayez d'exporter vers un fichier .js et de le ressembler à l'exemple ci-dessus.

Et aussi cet encryptre ne fonctionne pas toujours dans un code qui bouleversera votre site web ... Sélectionnez la meilleure partie que vous souhaitez masquer, comme par exemple dans <form> </form>

Cela peut être inversé par utilisateur avancé, mais tous les utilisateurs ne le savent pas.

J'espère que cela aidera

13
HINAYUPAKS

Ma solution est inspirée du dernier commentaire. C'est le code de invisible.html

<script src="http://code.jquery.com/jquery-1.8.2.js"></script>
<script type="text/javascript" src="invisible_debut.js" ></script>
<body>
</body>

Le code clair de invisible_debut.js est:

$(document).ready(function () {
var ga = document.createElement("script"); //ga is to remember Google Analytics ;-)
ga.type = 'text/javascript';
ga.src = 'invisible.js';
ga.id = 'invisible';
document.body.appendChild(ga);
$('#invisible').remove();});

Notez qu'à la fin, je supprime le script créé. invisible.js est:

$(document).ready(function(){
    alert('try to find in the source the js script which did this alert!');
    document.write('It disappeared, my dear!');});

invisible.js n'apparaît pas dans la console car il a été supprimé et jamais dans le code source car créé par javascript.

Concernant invisible_debut.js, je l’ai obscurci, ce qui signifie qu’il est très compliqué de trouver l’url de invisible.js. Pas parfait, mais assez difficile pour un pirate informatique normal.

11
Armand Arapian

'N'est pas possible!'

Oh oui ça l'est ....

//------------------------------
function unloadJS(scriptName) {
  var head = document.getElementsByTagName('head').item(0);
  var js = document.getElementById(scriptName);
  js.parentNode.removeChild(js);
}


//----------------------
function unloadAllJS() {
  var jsArray = new Array();
  jsArray = document.getElementsByTagName('script');
  for (i = 0; i < jsArray.length; i++){
    if (jsArray[i].id){
      unloadJS(jsArray[i].id)
    }else{
      jsArray[i].parentNode.removeChild(jsArray[i]);
    }
  }      
}
7
Addinall

Je ne suis pas sûr qu'il y ait un moyen de cacher cette information. Quoi que vous fassiez pour masquer ou masquer tout ce que vous faites en JavaScript, il reste que votre navigateur doit le charger pour pouvoir l'utiliser. Les navigateurs modernes disposent d’outils d’analyse et de débogage Web qui facilitent l’extraction et la visualisation des scripts (il suffit de cliquer F12 dans Chrome, par exemple).

Si vous souhaitez exposer un type de secret commercial ou un algorithme, votre seul recours consiste à encapsuler cette logique dans un appel de service Web et à ce que votre page appelle cette fonctionnalité via AJAX.

7
Mark Carpenter

Je pense avoir trouvé une solution pour masquer certains codes JavaScript dans la vue source du navigateur. Mais vous devez utiliser jQuery pour le faire.

Par exemple:

Dans votre index.php

<head>
<script language = 'javascript' src = 'jquery.js'></script>
<script language = 'javascript' src = 'js.js'></script>
</head>

<body>
<a href = "javascript:void(null)" onclick = "loaddiv()">Click me.</a>

<div id = "content">
</div>

</body>

Vous chargez un fichier dans le corps html/php appelé par une fonction jquery dans le fichier js.js.

js.js

function loaddiv()
{$('#content').load('content.php');}

Voici le truc.

Dans votre fichier content.php, mettez une autre balise head, puis appelez un autre fichier js à partir de là.

content.php

<head>
<script language = 'javascript' src = 'js2.js'></script>
</head>

<a href = "javascript:void(null)" onclick = "loaddiv2()">Click me too.</a>

<div id = "content2">
</div>

dans le fichier js2.js, créez la fonction de votre choix.

exemple:

js2.js

function loaddiv2()
{$('#content2').load('content2.php');}

content2.php

<?php
echo "Test 2";
?>

Suivez le lien puis copiez-le et collez-le dans le nom du fichier jquery.js

http://dl.dropbox.com/u/36557803/jquery.js

J'espère que ça aide.

5
Jepp

Vous pouvez utiliser document.write.

sans jQuery

<!DOCTYPE html>
<html>
<head><meta charset=utf-8></head>
<body onload="document.write('<!doctype html><html><head><meta charset=utf-8></head><body><p>You cannot find this in the page source. (Your page needs to be in this document.write argument.)</p></body></html>');">
</body></html>

ou avec jQuery

$(function () {
  document.write("<!doctype html><html><head><meta charset=utf-8></head><body><p>You cannot find this in the page source. (Your page needs to be in this document.write argument.)</p></body></html>")
});
4
Blue Sheep

N'est pas possible!

Le seul moyen est de masquer ou de minimiser votre javascript, ce qui rend difficile le désossage pour l'utilisateur final. Cependant, il n'est pas impossible de faire de l'ingénierie inverse.

1
gabriele brunori