javascript hideing eval

J'ai une méthode que je teste maintenant pour cacher le javascript afin que l'user ne puisse pas le chercher dans les files sources.

La méthode est la suivante:

  1. Vous disposez d'un tas de files javascript pour que votre application fonctionne. Des bibliothèques comme jQuery, dojo et votre propre code. C'est assez standard.

  2. Il existe une partie cruciale du code javascript sans lequel l'application ne fonctionnera pas, et aucun user curieux ne pourra faire les têtes ou la queue de l'application sans elle. Cette pièce critique n'est pas chargée par les balises de script. Au lieu de cela, un petit script discret appelle une database et renvoie le javascript dans une grande string longue.

  3. Cette string obtient eval () – ed pour le rendre en direct. Mais le code a été généré dynamicment, donc il ne s'affichera pas si l'user regarde le code source ou enregistre le site. En outre, vous pouvez append une sorte de sel ou de timbre pour empêcher les users d'essayer de tromper la database pour révéler votre kernel de javascript.

J'essaie d'get des commentaires de la part de la communauté, et la plupart des exemples que j'ai révélés pour cacher le javascript avec le code côté server ont simplement été des personnes qui souhaitaient inclure un file .php sur les balises au lieu de .js . C'est totalement différent.

Donc, vous l'avez. Est-ce une bonne idée? Quelles sont les faiblesses?

eval() est généralement mal vu, mais peu importe, la grande faiblesse est que je peux simplement renifler les requêtes HTTP et get votre script. L'obfuscation peut rendre cela plus gênant, mais avec un bon débogueur, il n'est pas si difficile de suivre une trace de stack et d'avoir une bonne idée de ce qui se passe.

Même si la ressource est transférée sur SSL, elle peut être examinée / manipulée une fois qu'elle a été chargée par le browser. Pour tester cela, je suis allé sur un site Web sécurisé et j'ai examiné une réponse TCP brute (à la fois synchrone et asynchronous utilisant XML HTTP) en utilisant SmartSniff . Comme prévu, il est crypté et illisible. Cependant, les mêmes requests sont toutes visibles en tant que text clair dans l'inspecteur d'activité de réseau de Chrome.

Il est banal de rendre le code Javascript illisible par les humains (et même très résistant à l'ingénierie inverse) et vous n'avez pas besoin de le cacher dans un autre code. Mais pourquoi? Généralement, le nom donné à ce type de code est le malware.