node.js - защита кода? - PullRequest
52 голосов
/ 10 мая 2011

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

Есть ли способ защитить код JavaScript?

Ответы [ 12 ]

59 голосов
/ 06 февраля 2012

Вы можете сделать это с помощью NativeExtension для узла

У вас есть файл 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 версии всех ваших файлов и передавал их своим клиентам. Им также понадобится собственное расширение, но теперь вы немного усложнили изменение кода без особых усилий. Вы можете даже сделать внутренний добавочный номер дома и проверить информацию о лицензии, чтобы помочь предотвратить пиратство (имейте в виду, что это не остановит пиратство, для этого нет решения).

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

Просто включите лицензионное соглашение и дайте им исходный код.Они могут захотеть настроить его в любом случае.

9 голосов
/ 07 июля 2014

Поскольку я только что завершил огромный чистый проект Nodejs в 80+ файлах, у меня была та же проблема, что и у OP.Мне нужна была как минимум минимальная защита для моей тяжелой работы, но, похоже, эта самая основная потребность не была покрыта сообществом NPMjs OS.Прибавьте к серьезной травме, система шифрования пакетов JXCore была взломана на прошлой неделе за несколько часов, так что вернемся к запутыванию ...

Итак, я создал полное решение, которое обрабатывает слияние файлов и их удаление.У вас есть возможность пропустить указанные файлы / папки, а также от слияния.Затем эти файлы копируются в новое выходное местоположение объединенного файла, и ссылки на них перезаписываются автоматически.

NPMjs-ссылка на node-uglifier

Githubrepo of node-uglifier

PS: Я был бы рад, если бы люди внесли свой вклад, чтобы сделать его еще лучше.Это война между ворами и трудолюбивыми программистами, такими как ты.Давайте объединим наши силы, усилим боль в обратном инжиниринге!

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

Чтобы быть очень ясным, Javascript на стороне клиента (загружаемый с удаленного сервера в стандартный веб-браузер) не может быть защищен от просмотра и / или изменения независимо от того, как вы его запутываете после реконструкции («де-обфускации») Первоначальный источник технически тривиален. (Обфускация Javascript - просто еще один пример широко используемого неправильного определения безопасности «безопасность через неизвестность».)

Если вы хотите использовать Javascript и Node.js для предоставления защищенного «продукта» (который в этом контексте является приложением или услугой, требующей установки на сервере, который ваша компания не контролирует), вы не можете защитить его как единственный Доступная вам опция (обфускация) такой защиты не обеспечивает.

Следует отметить, что даже если ваш продукт предоставляется в виде двоичного исполняемого файла, это не гарантирует, что вы сможете защитить интеллектуальную собственность, которую он содержит, поскольку любой двоичный файл можно декомпилировать в понятный формат. В этом случае мы получаем некоторый уровень безопасности, основанный на чрезмерных ресурсах (время / опыт), необходимых для преобразования низкоуровневого машинного кода (как предусмотрено декомпиляцией) в логические конструкции более высокого уровня, используемые современными языками программирования. (Это от того, кто однажды декомпилировал CP / M, чтобы понять его внутренний дизайн вручную.;)

Однако все еще не потеряно: если мы предположим, что можно защищать интеллектуальную собственность программным путем (жюри все еще не решено), есть способ предоставить продукт на основе Node.js безопасным способом, но это не для технично-технических приключений, так как для этого потребуется существенный рефакторинг исходного кода Node.js (чтобы добавить поддержку криптографически безопасных библиотек и удалить или иным образом защитить - отражение объектов для ваших проприетарных библиотек.)

5 голосов
/ 29 января 2014

JXcore (node.js 0.11.X distro) имеет собственную функцию упаковки JX, которая защищает исходный код и ресурсы. Вы даже можете выбрать, будет ли этот конкретный пакет использоваться из других приложений или нет. (автономная ИЛИ библиотека)

Допустим, у вас много файлов JS и т. Д., И точка входа в ваш модуль выглядит примерно так:

exports.doThis = function() { ...... };

если вы просто вызовите метод ниже и скомпилируете его в пакет JX, исходный код будет в безопасности.

jxcore.utils.hideMethod(exports.doThis);

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

Вам нужен JXcore для запуска пакетов JX.

Более подробная информация доступна по адресу JXcore

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

JavaScript-код на стороне сервера является полностью закрытым исходным кодом.Никто не может его прочитать.

Код JavaScript на стороне клиента является полностью открытым исходным кодом.Это может прочитать каждый.

Для последнего вы ничего не можете сделать, но то же самое относится к RoR, ASP.NET, PHP и т. Д.

Фактический код сервера закрыт, если вы не сделаете его публично.доступно.

Если вы делаете библиотеку и пытаетесь продать ее как сторонний источник, она открыта и может быть украдена.Конечно, вы можете подать в суд на них за нарушение авторских прав.

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

Большинство коммерческих проектовна узле строятся сервисы.

4 голосов
/ 16 февраля 2015

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

4 голосов
/ 01 января 2013

Упакуйте свою основную логику в модули. Эти модули можно собрать, а затем запустить через Google's closure .Вы даже можете сделать это как Задание Grunt как часть процесса сборки.

Это старый вопрос, но его стоит отметить.Примечание. Ничто из того, что вы делаете, не будет по-настоящему скрывать ваш код, но в любом случае ничего не будет отправлено через .Net (C #) или Java.В общем, простого использования такого инструмента, как uglify или closure, должно быть достаточно для запутывания.Будучи модульным и используя замыкание, вы на самом деле можете выполнить много оптимизаций, которые в противном случае были бы трудными.

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

вы можете использовать упаковщик для nodejs, чтобы скрыть ваш скрипт ...

1 голос
/ 17 марта 2018

Кто-нибудь пробовал nexe или pkg ?

Это похоже на хороший вариант.Утилита командной строки, которая компилирует ваше приложение Node.js в один исполняемый файл.

...