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?
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:
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.
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.