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

StackOverflow https://stackoverflow.com/questions/29399

  •  09-06-2019
  •  | 
  •  

Вопрос

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

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

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

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

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

Это было полезно?

Решение

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

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

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

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

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

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

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

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

Другие советы

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

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

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

Необфусцированный код шепчет:

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

Обфусцированный код говорит:

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

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

Раньше я видел, как люди делали несколько вещей:

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

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

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

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

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

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

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

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

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

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

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

2) Иметь серверную часть на стороне сервера, которая выполняет всю работу, и тонкий клиент, который просто отправляет запросы на сервер.

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

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

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

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

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top