web-dev-qa-db-ja.com

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

AVGは最近JavaScript Obfuscationが原因でWebページがブロックされたことを通知してきました。

Webページがブロックされたのはなぜですか?それは正確にはどういう意味ですか?

29
L84

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

隠蔽のいくつかの形式:

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

オブスキュレーション自体は悪ではありませんが、悪意を隠そうとするために使用でき、おそらくAVGが反対していました。非常に多くのオブスキュレーションを検出したため、 JavaScriptは、防止しようとしていたことを実行しようとしていたため、コードに問題がないことを確認できないため、デフォルトでコードを安全ではないと宣言しました。

38
jfriend00

難読化とは、意図した意味を隠すことです。

この場合、次のような明確に読み取り可能な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を難読化して、邪悪な意図のためではなく、作業を盗むことを困難にしています。難読化は、この目的で使用しても通常は役に立ちませんが、要点は必ずしも意図が悪意であるとは限らないということです。

13
Dennis