27

AVG недавно говорил мне, что веб-страница была заблокирована из-за обфускации JavaScript.

Почему веб-страница была заблокирована и что именно это означает?

2 ответа2

36

Запутывание - это средство "скрыть" реальное значение и намерение вашего кода JavaScript. Некоторые сайты используют его как препятствие для людей, которые хотят скопировать / заимствовать свой код. Другие сайты используют его как средство, чтобы скрыть реальное намерение кода.

Некоторые формы затемнения:

  1. Автоматическое переименование переменных в короткие бессмысленные имена, чтобы сделать код менее читаемым и трудным для понимания.
  2. Удаление лишних пробелов и разрывов строк, чтобы код представлял собой одну гигантскую длинную строку.
  3. Создание частей кода для самостоятельной генерации, чтобы первый проход кода выполнялся для создания фактического кода, который затем выполняется для выполнения намеченной операции.
  4. Использует коды символов и манипуляции со строками в сочетании с eval, а не с обычным кодом javascript для создания реального кода, который будет выполняться.

Затенение само по себе не является злом, но его можно использовать, чтобы скрыть злой умысел, и, вероятно, именно против этого возражал AVG. Он обнаружил так много затемнения, что не мог определить, пытается ли JavaScript сделать что-то, что он пытается предотвратить. Таким образом, он объявил код небезопасным по умолчанию, поскольку он не может проверить, что код выглядит нормально.

12

Запутывание относится к сокрытию предполагаемого значения чего-либо.

В этом случае четко читаемый фрагмент 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"));

Все три фрагмента кода делают одно и то же, но только чтение первого позволит вам легко понять его намерения.

Очевидно, AVG пытается понять назначение кода JavaScript, прежде чем разрешить его выполнение. Когда код будет запутан, AVG, вероятно, потерпит неудачу. Отсюда и предупреждение.

При этом некоторые веб-сайты запутывают свой JavaScript не из-за злых намерений, а из-за того, что им трудно украсть их работу. Запутывание обычно бесполезно, если используется для этой цели, но дело в том, что запутывание не обязательно означает плохие намерения.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .