Где эти функции JavaScript определены на этом сайте? - PullRequest
1 голос
/ 07 сентября 2011

Мне было интересно, можно ли скрыть файлы JavaScript при посещении веб-сайта. В первый момент я подумал, что это невозможно, вы можете запутать код настолько, насколько это возможно, но он все равно будет доступен для пользователя.

Однако я начал читать некоторые посты в блогах и сайты, которые предлагают некоторые хаки, чтобы «попытаться» скрыть код js. Некоторые из постов, которые я прочитал, где тезисы:

http://www.webmasterworld.com/forum91/2713.htm

http://www.codingforums.com/archive/index.php/t-23293.html

Я не очень хорошо их понял. Может кто-нибудь объяснить мне их?

И вот пример: я просматривал эту страницу http://www.regexbuddy.com/ и начал просматривать исходный код с помощью инспектора Google Chrome, чтобы выяснить, как реализованы функции, отображающие раскрывающийся список меню. Я мог видеть, что у каждого пункта меню есть onmouseover = "showpopup (x);" событие. К сожалению, я не смог найти эту функцию js "showpopup", а также другие функции javascript, использованные в коде (например, showmenu). Сервер отправляет 2 файла javascript menu.js и jgsoft.js , но ни один из этих файлов не содержит определений функций. Эти функции не были определены в html как встроенный скрипт.

Любопытно, что если в консоли Google я наберу window.showpopup, я смогу прочитать эту функцию. Так где же определены эти функции? Возможные хаки, чтобы "попытаться" скрыть файлы JavaScript? Способы обойти эти взломы?

Ответы [ 3 ]

1 голос
/ 07 сентября 2011

Функция Javascript eval() принимает строку в качестве параметра, анализирует содержимое этой строки как источник javascript и выполняет ее в контексте вызова. Это, как правило, в основе такого кода запутывания.

На вашей странице примера файл jgsoft.js содержит javascript, который при выполнении генерирует строку, содержащую определения для необходимых ей функций, затем использует eval() для ее выполнения и, таким образом, определяет функции.

Если вы сначала пройдете через функцию и добавите разрывы строк / пробелы в соответствующих точках, вы можете использовать отладчик Javascript, который позволяет шаг за шагом выполнять выполнение и просматривать состояние выполнения, например, Firebug , чтобы наблюдать за процессом.

В этом случае упаковка, по-видимому, была сделана для того, чтобы сделать файл меньше, а не просто запутывать. В общем, обфускация javascript не имеет смысла: если ваш браузер это видит, вы тоже можете.

1 голос
/ 07 сентября 2011

В случае regexbuddy.com - весь код находится в этом файле , как вы уже догадались, но он упакован с использованием упаковщика . Вероятно, он упакован для того, чтобы пытаться доставить его быстрее, а не затруднять его чтение, но это может быть обеими причинами.

Вы можете "распаковать" его, вставив содержимое jgsoft.js в этот инструмент .

Так что в основном - да, вы можете скрыть весь код, но так как браузер должен его выполнить, всегда будет возможно получить доступ к.

0 голосов
/ 07 сентября 2011

Вот вам стандартный взлом -

document.write(
  '<scr' + 'ipt type="text/javascript">function fo' + 'o(){alert("hello!");}');

Попробуйте поискать в источнике foo():)

В конечном счете, скрипт всегда есть - потому что Javascript интерпретируется (т.е.сценарий) язык, источник должен быть загружен голый в какой-то момент для выполнения.Это может быть запутано, но это должно быть там.

Итак, нет, вы не можете «спрятать» источник javascript - вы можете просто затруднить его поиск.Как правило, отладка + пошаговый является ответом;если у вас есть терпение.

...