Как лучше всего защитить проприетарный HTML / CSS / JavaScript?

Я пишу надежный, масштабируемый и довольно сложный движок веб-сайта с использованием HTMl, CSS и JavaScript. Я не хочу, чтобы его срывали, и мне интересно, есть ли способ защитить источник от просмотра на клиенте.

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


person user161190    schedule 15.11.2010    source источник
comment
То же, что и многие предыдущие вопросы, включая Как зашифровать HTML, CSS и JavaScript для предотвращения кражи, [Какие есть хорошие способы предотвратить копирование моего исходного кода людьми? ] (stackoverflow.com/questions/2562775/) и Как лучше всего закодировать / защитить код javascript?.   -  person Matthew Flaschen    schedule 16.11.2010


Ответы (10)


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

  1. JS / Html / CSS обычно довольно легко подобрать для обратной разработки, им вообще не нужно смотреть на ваш код.
  2. Скорее всего, ваши JS-новинки уже существуют и были написаны в 2001 году кем-то другим.
  3. Чем сложнее код, тем сложнее украсть интеллектуальную собственность, особенно если вы открываете исходный код.

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

Яркий пример: я мог бы написать свою собственную реализацию CKEditor (многие люди именно так и делают), но намного проще просто использовать CKEditor, и все знают, что это такое, кто это написал и т. Д.

Или возьмем, к примеру, карты Google Maps: вокруг много клонов, но есть только одна настоящая карта Google. Черт возьми, другие написали реализацию карт до Google, но карты Google более известны.

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

person BGerrissen    schedule 15.11.2010
comment
Я согласен с этим ответом: работа над хорошим проектом с открытым исходным кодом может легко привести вас в Google! И вы получите признание вне времени. - person PintoDoido; 28.09.2018

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

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

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

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

person NotMe    schedule 15.11.2010
comment
Это не первый подобный ответ, но Крис прав. Если то, что вы делаете, действительно уникально, вам нужно выбрать лицензирование и патентование. Вы не сможете помешать кому-либо восстановить ваш код, независимо от того, как вы его запутаете. Кроме того, вы рискуете выставить себя плохо для остального сообщества разработчиков, сделав неудачную попытку скрыть то, что вы делаете. - person David Smith; 16.11.2010

Нет, ты не можешь этого сделать.

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

Вы также не можете скрыть это, потому что вы хотите, чтобы браузер получал все ваши источники. Так что даже если вы сделаете какой-нибудь забавный ход вроде «загрузки javascript с динамической вставкой тегов сценария и последующим удалением тегов сценария». Что ж, это может сработать для некоторых неопытных пользователей, но использование такого инструмента, как Fiddler, снова покажет правду.

person jAndy    schedule 15.11.2010

Вы просто не можете этого сделать. Обфускация вашего javascript и CSS с помощью минимизатора, вероятно, ближе всего к вам.

person Eric Petroelje    schedule 15.11.2010
comment
-1 Это совершенно не поможет, есть средства красоты, которые распутают код так быстро, как вы его запутаете. - person Ben; 16.11.2010
comment
@Steve - Да, есть инструменты для отмены минимизации, но они по-прежнему не генерируют значимые имена функций и переменных из мусора. Таким образом, код будет несколько более читабельным, но все же трудным для расшифровки. - person Eric Petroelje; 16.11.2010

Что ж, популярный ответ будет «не выкладывайте это в сеть». Однако вы можете настолько запутать свой javascript, что, как правило, никто не станет его украсть. Удаление имен функций, переменных и т.п. имеет большое значение. В общем, будет проще начать с нуля.

person rob    schedule 15.11.2010
comment
Вероятно, это будет решение, которое я решу изучить. - person user161190; 16.11.2010
comment
Наличие всего вашего javascript в одном файле также хорошо для производительности, а также для обфускации, возможно, вы могли бы встроить и скрыть свой собственный JS в общей, довольно непонятной JS-библиотеке, такой как jQuery. Вряд ли кто-нибудь поймет. - person Andrew M; 16.11.2010
comment
@ Андрей М, ты только что это понял. - person Free Consulting; 16.11.2010
comment
Я не понимаю, от какого злоумышленника, по вашему мнению, вас защитит обфускация. Обычно люди не украдут ничего, кроме тривиальных фрагментов JavaScript, даже если вы не запутаете их. Люди, которые случайно копируют и вставляют JavaScript, не хотят иметь дело со сложными системами. Хакерам, достаточно опытным, чтобы иметь дело с большой недокументированной библиотекой, вероятно, не возникнет особых трудностей, разглядеть вашу обфускацию и скопировать что-нибудь интересное в вашем коде. - person Chuck; 16.11.2010
comment
нападающий кажется сильным словом. Всякая обфускация защищает вас от ленивых. Однако я склонен думать, что люди, которые крадут код, а не пишут его сами, как правило, ленивы. - person rob; 16.11.2010

Вы можете либо не размещать его в Интернете, либо оставить его доступным только через интранет; но нет никакого способа надежно запретить клиенту доступ к html / css / JS, не препятствуя им доступ к самому сайту.

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

person David says reinstate Monica    schedule 15.11.2010

Сокращение HTML, CSS и JavaScript немного поможет, но люди всегда могут их переформатировать. Лучше всего, если содержимое, отправленное клиентам, не совпадает с исходным содержимым, с которым вы работаете.

Этого можно добиться:

  • создание вашего HTML из некоторого фреймворка
  • создание CSS с помощью SASS / LESS и т. д.
  • с помощью компилятора JavaScript в ваших скриптах (т. е. Closure Compiler от Google)

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

person bdukes    schedule 15.11.2010

Вы можете использовать обфускатор JavaScript. Это затруднит чтение кода. Они все еще могут «сорвать», но это будет очень сложно понять и, следовательно, модифицировать. Невозможно полностью скрыть код.

person Adam    schedule 15.11.2010

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

Теоретически, а я на самом деле никогда этого не делал, но я знаю, что это возможно, возможно, можно будет загрузить ваши js-файлы через swf-файл размером 1x1 пиксель, который, в свою очередь, был отправлен через скремблер. Это все еще можно обойти, но это становится намного более раздражающим. Затем вы сможете отправить зашифрованный код aes в swf, расшифровать его на стороне клиента (используя библиотеки as3crypt), а затем записать его в браузер. Тем не менее, если вы не использовали swf для серии обратных вызовов, у вас все еще будет проблема, связанная с тем, что его все равно необходимо записать в браузер. Firebug и js-консоли других браузеров позволили бы пользователю получить "скомпилированные" js-файлы. Конечно, можно написать сценарий AS3 для регистрации серии обратных вызовов ...

Как я уже сказал, это скорее гипотетически, чем нет, и хотя я не сомневаюсь, что он может работать в идиллических ситуациях, Flash ограничен, и вам понадобятся знания AS3. Преимущество, конечно же, заключается в том, что это способ передать js в браузер, не позволяя пользователю легко его прочитать.

person cwallenpoole    schedule 15.11.2010

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

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

person Howie    schedule 17.03.2013