Я хочу использовать node.js в моем следующем проекте, но моему боссу не нравится, что наши конкуренты могут читать исходный код.
Есть ли способ защитить код JavaScript?
Я хочу использовать node.js в моем следующем проекте, но моему боссу не нравится, что наши конкуренты могут читать исходный код.
Есть ли способ защитить код JavaScript?
Вы можете выполнить это с помощью NativeExtension для node
У вас будет файл boostrap.js
, который добавит обработчик расширения для файлов .jse
// register extension
require.extensions[".jse"] = function (m) {
m.exports = MyNativeExtension.decrypt(fs.readFileSync(m.filename));
};
require("YourCode.jse");
YourCode.jse
будет зашифрованной версией вашего исходного кода (ключ для дешифрования не будет нигде в текстовом формате, потому что процесс дешифрования имеет место в родном расширении).
Теперь у вас есть функция NativeExtensions decrypt
, которая преобразует исходный код обратно в javascript. Просто создайте процесс создания зашифрованных версий .jse
всех ваших файлов и отпустите их для своих клиентов. Они также нуждаются в родном расширении, но теперь вам было немного сложнее изменить код без особых усилий. Вы даже можете сделать родной внутренний звонок и проверить информацию о лицензии, чтобы предотвратить пиратство (помните, что это не остановит пиратство, для этого нет решения).
Просто включите лицензионное соглашение и дайте им исходный код. Возможно, они захотят настроить его.
Чтобы быть предельно ясным, клиентский Javascript (загруженный с удаленного сервера в стандартный веб-браузер) не может быть защищен от просмотра и/или модификации независимо от того, как вы запутываете его с момента восстановления ( "de-obfuscation" ) исходный источник технически тривиален. (Обфускация Javascript - это просто еще один пример широко используемой "неправильной" безопасности "безопасность через неясность".)
Если вы хотите использовать Javascript и Node.js для обеспечения защищенного "продукта" (который в этом контексте является приложением или услугой, требующей установки на сервере, которую ваша компания не контролирует), вы не можете защитить ее либо как единственный доступный вам вариант (обфускация) не обеспечивает такую защиту.
Следует отметить, что даже если ваш продукт предоставляется как исполняемый файл, который не является гарантией, вы можете защитить его интеллектуальную собственность, поскольку любой двоичный файл может быть декомпилирован в понятный формат. В этом случае нам нравится некоторый уровень безопасности, основанный на чрезмерных ресурсах (времени/экспертизе), необходимых для преобразования низкоуровневого машинного кода (как обеспечивается декомпиляцией) в логические конструкции более высокого уровня, используемые современными языками программирования. (Это от того, кто однажды декомпилировал CP/M в понимание своего внутреннего дизайна вручную.;)
Все, однако, не потеряно: если мы предположим, что можно программно защитить интеллектуальную собственность (жюри по-прежнему отсутствует), есть способ обеспечить продукт Node.js безопасным образом, но это не для технически unadventurous, поскольку это потребует существенного рефакторинга исходного кода Node.js(чтобы добавить поддержку криптографически защищенных библиотек и удалить или иным образом защитить - отражение объекта для ваших собственных библиотек).
Поскольку я только что завершил огромный чистый проект Nodejs в 80+ файлах, у меня была такая же проблема, как и у OP. Мне нужна была минимальная защита для моей тяжелой работы, но, похоже, эта основная проблема не была охвачена сообществом OS NPMjs. Добавьте соль к травме. Система шифрования пакетов JXCore была взломана на прошлой неделе в течение нескольких часов, чтобы вернуться к обфускации...
Итак, я создал полное решение, которое обрабатывает слияние файлов, uglifying. У вас есть возможность оставить определенные файлы/папки, а также от слияния. Затем эти файлы копируются в новое местоположение вывода объединенного файла, а ссылки на них переписываются автоматически.
PS: Я был бы рад, если бы люди помогли сделать его еще лучше. Это война между ворами и трудолюбивыми программистами, такими как вы. Давайте присоединимся к нашим силам, увеличим боль обратного проектирования!
JXcore (node.js 0.11.X distro) имеет свою собственную функцию упаковки JX, которая защищает исходный код и активы, Вы даже можете выбрать, может ли этот конкретный пакет использоваться из других приложений или нет. (автономная библиотека OR)
Скажем, у вас много файлов JS и т.д., и точка входа в ваш модуль - это что-то вроде:
exports.doThis = function() { ...... };
если вы просто вызываете метод ниже и компилируете его в пакет JX, исходный код будет безопасным.
jxcore.utils.hideMethod(exports.doThis);
это (скрытие метода) потребовалось бы только для файла входа, поскольку все остальные субсайтовые файлы JS недоступны из вызывающего приложения.
Вам нужно JXcore для запуска пакетов JX.
Более подробную информацию можно найти в JXcore
Код JavaScript на стороне сервера полностью закрыт. Никто не может его прочитать.
Клиентский код javascript полностью открыт. Все могут прочитать его.
Для последнего вы можете ничего не делать, но то же самое относится к RoR, ASP.NET, PHP и т.д.
Фактический код сервера закрыт, если вы публично не сделаете его доступным.
Если вы создаете библиотеку и пытаетесь продать ее в качестве стороннего источника, тогда она открывается и может быть украдена. Конечно, вы можете подать в суд на них за нарушение авторских прав.
Существуют различные крупные компании, такие как extjs, которые продают библиотеки, которые могут быть украдены, поэтому то, что они на самом деле продают вам, это код и служба поддержки.
Большинство коммерческих проектов, построенных на node, являются службами.
Поместите свою основную логику в модули. Эти модули можно построить, а затем выполнить через закрытие Google. Вы даже можете сделать это как задачу Grunt как часть процесса сборки.
Это старый вопрос, но стоит отметить. Примечание. Ничто из того, что вы сделаете, действительно скроет ваш код, но ничто не будет отправлено через .Net(С#) или Java, если на то пошло. В общем, просто используя инструмент, например uglify или закрытие, должно быть достаточно точки обфускации. Будучи модульным и использующим закрытие, вы действительно можете сделать много оптимизаций, которые в противном случае были бы трудными.
Вы можете использовать EncloseJS - компилятор для проектов node.js. Он действительно компилирует JavaScript на собственный код, а ваши источники не включены в двоичный файл.
вы можете использовать packer для nodejs для обфускации вашего script...
Вы не можете быть абсолютно уверены, что никто не сможет прочитать ваш код. Вы можете использовать обфускацию или минимизацию, что может значительно затруднить декодирование вашего кода. Одним из примеров обфускатора / minifier является Google Closure Compiler для JavaScript.
У меня есть идея.
Защитите приложение cpp
или java
вместо js.
utf-8
файловый ресурс.cpp
или java
для загрузки всего файла в linux pc
или arm computer
, убедитесь, что у вас есть надежный пароль или закрыть ssh port
или отключите видеопорт и просмотрите файл linux. только через Интернет.Так что это очень похоже на черный ящик, клиенты ничего не могут сделать с вашим кодом.