eval скрывающий код в JGraph vs обфускация \ упаковка - PullRequest
1 голос
/ 10 мая 2011

Почти каждый раз, когда возникает вопрос об eval, ответ один и тот же - не используйте eval.Я думаю, что есть причина, чтобы существовать.Но есть пробелы Мэнни, чтобы упасть.

Так что о jgraph - почему они используют eval (в этом примере );практично ли использовать eval для сокрытия кода, когда есть инструменты запутывания и упаковки для javascript?Это единственное «практическое» использование?

Там задействовано много денег, поэтому я думаю, что они знают, что делают.

Ответы [ 2 ]

1 голос
/ 10 мая 2011

Там много денег, поэтому я думаю, они знают, что делают.

Не совсем. Это бессмысленная мера, предназначенная для замедления любого потенциального плагиата со стороны разработчиков JS, но на самом деле она добавляет не более 30 секунд к шагам, необходимым для достижения де-запутанного кода. Например, рассмотрим, что произойдет, если я открою http://jsFiddle.net или http://jsbin.com и введите в поле JavaScript следующее:

var txt = "textContent" in document.body ? "textContent" : "innerText",
    eval = function (s) { document.body[txt] = s; }

Затем я копирую и вставляю код с этого сайта прямо под этим в скрипте и нажимаю «Выполнить». В результате весь код выгружается на страницу, так что я могу скопировать и вставить его в http://jsbeautifier.org. И это не единственный способ выгрузить код. Можно просто скопировать и вставить строку в любое окно консоли инструментов разработчика и получить результат.

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

0 голосов
/ 10 мая 2011

Вы МОЖЕТЕ использовать eval!Это дает вам гораздо больше возможностей!Иногда нет другого способа что-то сделать.

Но:

  • код, выполняемый через eval, может быть медленнее
  • ошибки в уклоняемых кодах действительно трудно найти (вы не получаете номеров строк или что-то в этом роде)
  • eval может сделать ваш код нечитаемым, если его часто использовать

Пример, который был бы невозможен без eval:

var varname = "X";
var varvalue = 5;
eval("var "+varname+" = "+varvalue+";");
console.log(X);
...