web-dev-qa-db-fra.com

Qu'est-ce que l'obfuscation JavaScript et pourquoi est-ce une menace?

AVG m'annonçait récemment qu'une page Web avait été bloquée à cause de JavaScript Obfuscation .

Pourquoi la page Web a-t-elle été bloquée et qu'est-ce que cela signifie exactement?

28
L84

L'obfuscation est un moyen de "masquer" le sens réel et l'intention de votre code javascript. Certains sites l'utilisent comme un obstacle pour les personnes qui souhaitent copier/emprunter leur code. D'autres sites l'utilisent comme moyen de masquer l'intention réelle du code.

Quelques formes d'obscurcissement:

  1. Renommer automatiquement les variables en noms courts sans signification pour rendre le code moins lisible et plus difficile à comprendre.
  2. Suppression de tous les espaces et des sauts de ligne supplémentaires pour que le code soit une longue ligne géante.
  3. La création automatique de parties du code de sorte qu'un premier passage du code s'exécute pour créer le code réel qui s'exécute ensuite pour exécuter l'opération souhaitée.
  4. Utilise des codes de caractères et des manipulations de chaîne combinées avec eval plutôt que du code javascript normal pour construire le code réel à exécuter.

L'obscurcissement n'est pas un mal en soi, mais il peut être utilisé pour tenter de cacher une intention perverse et c'est probablement ce à quoi s'opposait AVG. Il a détecté tellement d’obscurcissements qu’il ne pouvait pas savoir si le javascript tentait de faire quelque chose qu’il essayait d’empêcher. En tant que tel, il a déclaré le code non sécurisé par défaut, car il ne peut pas vérifier que le code semble correct.

37
jfriend00

L'obscurcissement consiste à cacher le sens voulu de quelque chose.

Dans ce cas, un extrait de code JavaScript clairement lisible, tel que

window.onload = function() { alert("Hello " + username) };

peut être remplacé par

var _0xc5b2=["\x6F\x6E\x6C\x6F\x61\x64",
        "\x48\x65\x6C\x6C\x6F\x20"];window[_0xc5b2[0]]=
    function (){alert(_0xc5b2[1]+username);} ;

ou même

eval(unescape("var%20_0xc5b2%3D%5B%22onload%22%2C%22Hello%20%22%5D%3Bwindow"+
  "%5B_0xc5b2%5B0%5D%5D%3Dfunction%20%28%29%7Balert%28_0xc5b2%5B1%5D+username"+
  "%29%3B%7D%20%3B"));

Les trois extraits de code font exactement la même chose, mais seule la lecture du premier vous permettra de comprendre facilement ses intentions.

Apparemment, AVG tente de comprendre l'objectif du code JavaScript avant de permettre son exécution. Lorsque le code est obscurci, AVG échouera probablement. D'où l'avertissement.

Cela étant dit, certains sites Web masquent leur code JavaScript non pas à cause de mauvaises intentions, mais pour rendre difficile le vol de leur travail. L'obfuscation est généralement inutile si elle est utilisée à cette fin, mais le fait est que l'obfuscation ne signifie pas nécessairement de mauvaises intentions.

12
Dennis