JavaScript 難読化とは何ですか? また、なぜ脅威となるのですか?

JavaScript 難読化とは何ですか? また、なぜ脅威となるのですか?

AVGは最近、ウェブページがブロックされたと私に伝えてきました。JavaScript 難読化

ウェブページがブロックされたのはなぜですか? また、それは具体的に何を意味しますか?

答え1

難読化は、JavaScript コードの実際の意味と意図を「不明瞭にする」手段です。一部のサイトでは、コードをコピー/借用しようとする人々に対する障害として難読化を使用しています。他のサイトでは、コードの実際の意図を隠す手段として難読化を使用しています。

隠蔽のいくつかの形式:

  1. 変数の名前を意味のない短い名前に自動的に変更し、コードの可読性と理解性を低下させます。
  2. 余分な空白と改行をすべて削除して、コードを 1 つの巨大な長い行にします。
  3. コードの一部を自己生成するようにして、コードの最初のパスを実行して実際のコードを作成し、その後そのコードを実行して目的の操作を実行します。
  4. 実行される実際のコードを構築するには、通常の JavaScript コードではなく、文字コードと文字列操作を eval と組み合わせて使用​​します。

隠蔽自体は悪ではありませんが、悪意を隠すために使用される可能性があり、おそらくそれが AVG が反対していたことだったのでしょう。検出した隠蔽があまりにも多かったため、JavaScript が阻止しようとしていることを実行しようとしているかどうかはわかりませんでした。そのため、コードが安全かどうかを確認できないため、デフォルトでコードを安全でないと宣言しました。

答え2

難読化とは、何かの意図された意味を隠すことを指します。

この場合、次のような明確に読みやすいJavaScriptスニペットが

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

次のように置き換えることができる

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

あるいは

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"));

これら 3 つのコード スニペットはすべてまったく同じことを行いますが、最初のコード スニペットだけを読めば、その意図を簡単に理解できます。

どうやら、AVG は JavaScript コードの実行を許可する前にその目的を理解しようとしているようです。コードが難読化されている場合、AVG は失敗する可能性があります。そのため、警告が表示されます。

そうは言っても、一部の Web サイトでは、悪意からではなく、盗用を困難にするために JavaScript を難読化しています。この目的で難読化を使用すると、通常は役に立ちませんが、重要なのは、難読化が必ずしも悪意を意味するわけではないということです。

関連情報