Достаточно ли использовать обфускатор для защиты моего кода JavaScript? - PullRequest
25 голосов
/ 27 августа 2008

Я работаю над созданием инструмента разработки, написанного на JavaScript.

Это не будет проект с открытым исходным кодом и будет продаваться (надеюсь) как коммерческий продукт.

Я ищу лучший способ защитить мои инвестиции. Достаточно ли использования обфускатора (обработчика кода) для разумной защиты кода?

Есть ли другие альтернативы, о которых я не знаю?

(Я не уверен, что слово «обфускатор» - правильное слово, это одно из приложений, которое берет ваш код и делает его очень нечитаемым.)

Ответы [ 9 ]

139 голосов
/ 27 августа 2008

Я собираюсь рассказать вам секрет. Как только вы это поймете, вы почувствуете себя намного лучше в связи с тем фактом, что обфускация Javascript действительно полезна только для экономии пропускной способности при отправке скриптов по проводам.

Ваш исходный код не стоит красть.

Я знаю, что это шок для эго, но я могу сказать это уверенно, даже не увидев написанной вами строки кода, потому что за пределами очень немногих областей разработки, где происходит серьезная магия, это верно для всех источников -код.

Скажем, завтра кто-то выкинул на порог вашей стопки DVD-диски с исходным кодом для Windows Vista. Что бы вы могли с этим сделать? Конечно, вы можете скомпилировать и раздать копии, но это всего лишь на один шаг больше, чем копирование розничной версии. Вы могли бы кропотливо найти и удалить код проверки лицензии, но это то, что какой-то умный ребенок уже сделал с двоичными файлами. Замените логотип и графику, сделайте вид, что написали это сами и рекламируете как «Vicrosoft Mista»? Вас поймают.

Вы могли бы потратить огромное количество времени на чтение кода, пытаясь понять его и по-настоящему «украсть интеллектуальную собственность», которую Microsoft инвестировала в разработку продукта. Но вы будете разочарованы. Вы обнаружите, что код был длинной серией мирских решений, принимаемых одно за другим. Некоторые из них будут умнее, чем вы думаете. Кто-то оставит тебя качать головой, размышляя о том, какого рода обезьян они там нанимают. Большинство просто заставит вас пожать плечами и сказать: «Да, вот как вы это делаете».

В процессе вы узнаете много нового о написании операционных систем, но это не повредит Microsoft.

Замените "Vista" на "Leopard", и приведенные выше абзацы не изменятся ни на один бит. Это не Microsoft, это программное обеспечение . Половина людей на этом сайте может, вероятно, разработать клон Stack Overflow, не обращая внимания на источник этого сайта. Они просто не имеют. Исходный код Firefox и WebKit доступен для всех. Теперь иди написать свой собственный браузер с нуля. Увидимся через несколько лет.

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

31 голосов
/ 04 марта 2011

Я глубоко не согласен с большинством ответов выше.

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

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

Необъяснимый код шепотом:

  • Давай, проанализируй меня, используй меня снова. Может быть, вы могли бы сделать лучшее программное обеспечение, используя меня.

Запутанный код говорит:

  • Уходи, чувак. Дешевле использовать свои собственные идеи, чем пытаться взломать меня.
3 голосов
/ 27 августа 2008

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

В прошлом я видел, как люди делали несколько вещей:

  1. Вставьте много пробелов вверху страницы с сообщением о том, что код недоступен, когда на самом деле вам просто нужно прокрутить вниз несколько страниц, чтобы добраться до него.
  2. Запуск его через какой-то кодер, это настолько полезно, что его можно просто запустить через декодер.
  3. Другой метод заключается в сокращении имен переменных до одного символа и удалении пробелов (это тоже вопрос эффективности).

Есть много других методов.

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

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

1 голос
/ 27 августа 2008

Вы всегда сталкиваетесь с тем, что любой пользователь, который заходит на вашу веб-страницу, скачает какую-то рабочую версию вашего исходного кода Javascript. Они будут иметь исходный код. Запутывание может очень затруднить повторное использование кем-либо с намерением украсть вашу тяжелую работу. Однако во многих случаях кто-то может даже повторно использовать запутанный источник! Или, в худшем случае, они могут распутать его вручную и в конце концов понять.

Примером такой ситуации может быть Google Maps . Источник Javascript явно запутан. Однако для действительно частной / чувствительной логики они передают данные на сервер, и сервер обрабатывает эту информацию с помощью XMLHttpRequests (AJAX). Благодаря такому дизайну у вас есть важные части на стороне сервера, гораздо более жестко управляемые.

0 голосов
/ 27 августа 2008

Если это для веб-сайта, который по своей природе откладывает просмотр своего кода одним щелчком мыши, есть ли действительно какая-либо причина что-либо скрывать? Если кто-то захочет украсть ваш код, он, скорее всего, попытается сделать даже самый искаженный код понятным для человека. Посмотрите на коммерческие сайты, они не запутывают свой код, и никто не выходит и не крадет код из приложений Google. Если вы действительно беспокоитесь о краже кода, я бы посоветовал написать его на другом скомпилированном языке. (что, конечно, разрушает всю вещь веб-приложения ...) Даже тогда, вы не совсем в безопасности, есть много декомпиляторов.

Так что на самом деле нет способа делать то, что вы хотите, перед лицом кого-то с достаточной мотивацией.

0 голосов
/ 27 августа 2008
Обфускатора

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

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

Если вы используете какой-либо другой язык, например, Java или .NET, вы можете попробовать сделать что-то вроде «звонка домой», чтобы убедиться, что номер лицензии соответствует данному URL. Это работает, если ваше приложение представляет собой какое-то онлайн-приложение, которое будет постоянно подключаться к Интернету. Но имея доступ к источнику, люди могут легко обойти эту часть.

Короче говоря, javascript - плохой выбор для того, что вы делаете.
Шаг вперед по сравнению с тем, что вы делаете, возможно, использует серверную часть веб-сервиса для получения ваших данных. Позвольте веб-сервису обрабатывать процесс аутентификации / проверки. Требуется немного усилий, чтобы убедиться, что он пуленепробиваемый, но он может работать

0 голосов
/ 27 августа 2008

Я бы сказал, что да, достаточно, если вы также удостоверитесь, что вы сжимаете код, используя такой инструмент, как Упаковщик Дина Эдварда или аналогичный. Если вы думаете о том, что возможно с такими инструментами, как .NET Reflector, с точки зрения обратного инжиниринга скомпилированного кода / IL в .NET, вы понимаете, что ничего не можете сделать, чтобы полностью защитить свои инвестиции.

С другой стороны, помните, что люди, которые публикуют свой исходный код, в любом случае, похоже, тоже неплохо справляются - это их опыт, когда люди хотят большего, чем их интеллектуальная собственность.

0 голосов
/ 27 августа 2008

Обфускатор вам совсем не поможет, если кто-то захочет разобраться в коде. Код все еще существует на клиентском компьютере, и они могут взять его копию и изучить на досуге.

Просто невозможно скрыть код, написанный на Javascript, поскольку исходный код должен быть передан в браузер для выполнения.

Если вы хотите скрыть свой код, у вас есть следующие опции:

1) Используйте среду, в которой скомпилированный код (не исходный код) загружается на клиент, например, Вспышка или Silverlight. Я даже не уверен, что это надежно, но это, конечно, намного лучше, чем Javascript.

2) Наличие серверной части на стороне сервера, которая выполняет работу, и тонкого клиента, который просто выполняет запросы к серверу.

0 голосов
/ 27 августа 2008

Это, наверное, самое лучшее, что вы можете сделать. Просто знайте, что любой, у кого достаточно преданности делу, может де-запутать вашу программу. Просто убедитесь, что вы довольны этим, прежде чем начинать свой проект. Я думаю, что самая большая проблема с этим будет контролировать, кто использует его на своем сайте. Если кто-то заходит на сайт с вашим кодом и ему нравится то, что он делает, не имеет значения, что они не понимают, что делает код, или не могут его прочитать, когда они могут просто скопировать код, и используйте его на своем сайте.

...