Недавно AVG сообщил мне, что веб-страница была заблокирована из-заОбфускация JavaScript.
Почему веб-страница была заблокирована и что именно это означает?
решение1
Обфускация — это способ «сокрытия» настоящего смысла и намерения вашего кода javascript. Некоторые сайты используют его как препятствие для людей, которые хотят скопировать/позаимствовать их код. Другие сайты используют его как способ скрыть фактическое намерение кода.
Некоторые формы сокрытия:
- Автоматическое переименование переменных в короткие бессмысленные имена, чтобы сделать код менее читаемым и трудным для понимания.
- Удаляем все лишние пробелы и переносы строк, чтобы код представлял собой одну гигантскую длинную строку.
- Создание самогенерирующихся частей кода, чтобы первый проход кода создавал фактический код, который затем выполняется для выполнения предполагаемой операции.
- Использует коды символов и манипуляции строками в сочетании с eval вместо обычного кода JavaScript для создания фактического кода, который будет запущен.
Затенение само по себе не является злом, но его можно использовать, чтобы попытаться скрыть злой умысел, и, вероятно, именно против этого возражал 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"));
Все три фрагмента кода выполняют одно и то же действие, но только прочтение первого позволит вам легко понять его намерения.
Видимо, AVG пытается понять цель кода JavaScript, прежде чем разрешить его выполнение. Если код запутан, AVG, скорее всего, потерпит неудачу. Отсюда и предупреждение.
При этом некоторые веб-сайты обфускируют свой JavaScript не из-за злых намерений, а чтобы затруднить кражу их работы. Обфускация обычно бесполезна, если используется для этой цели, но суть в том, что обфускация не обязательно означает плохие намерения.