Подтвердить что ты не робот

Как предотвратить кражу, копирование и просмотр кода JavaScript?

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

Например, я столкнулся с сайтом, где просмотр текущего источника страницы ничего не возвращал.

В другом случае доступ или загрузка файлов .js из браузера

http://gget.com/somesecret.js,

перенаправляет вас и прочее.

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

4b9b3361

Ответ 1

Вы можете запутать свой Javascript. Есть много инструментов, которые можно сделать в дикой природе, например. http://www.javascriptobfuscator.com/. Однако это не мешает кому-либо видеть код, но затрудняет его чтение.

Ответ 2

Это просто невозможно.

Чтобы браузер посетителя мог выполнить script, он должен иметь возможность его загрузить. Не важно, какой трюк вы пытаетесь использовать с помощью JS, разрешения сервера и т.д., В конце дня они всегда могут просто wget http://example.com/yourcoolscript.js. И даже если они не могут (например, вам нужны "секретные" заголовки для этого запроса), которые, вероятно, будут препятствовать поведению большинства браузеров, в то же время не останавливая определенного человека от поиска.

По сути, поскольку JS выполняется на стороне клиента, клиент должен иметь доступ к "оригинальному" JS файлу.

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

В принципе - "если вы его построите, они будут выглядеть".: -)

Ответ 3

Есть два типа пользователей: есть большая группа, которой все равно. Нет необходимости защищать их.

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

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

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

Ответ 4

Если у вас большие секреты, держите их на сервере.

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

Мы строим тяжелое приложение JS и вылечили эту паранойю давным-давно.
Если факт, мы сделали обратное.

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

Ответ 5

Одна идея состоит в том, чтобы использовать websockets, чтобы обслуживать файлы javascript в браузере через socket.listener и работать с eval. Таким образом, очень важно, чтобы кто-нибудь видел фактический "источник", поскольку соединение сокета уже закрыто.

Есть еще одна удивительная тактика, которую можно увидеть на домашней странице http://samy.pl, , которая использует пробелы (\ u0020) и tabs (\ u0009) как байтовый шифр, чтобы скрыть код JS!

Если вы просматриваете источник, вы можете увидеть только 1 строку фактического JS-кода: http://pastebin.com/e0pqJ8sB Посмотрите сами, можете ли вы понять, как это работает (нет спойлеров!)

Что касается обфускаторов, см. http://utf-8.jp/public/jjencode.html (и/или другую версию)

Этот бесплатный обфускатор работает на стороне клиента и создает тарабарщину, которую unminify.com и jsbeautifier не могут даже декодировать:

$=~[];$={___:++$,$$$$:(![]+"")[$],__$:++$,$_$_:(![]+"")[$],_$_:++$,$_$$:({}+"")[$],$$_$:($[$]+"")[$],_$$:++$,$$$_:(!""+"")[$],$__:++$,$_$:++$,$$__:({}+"")[$],$$_:++$,$$$:++$,$___:++$,$__$:++$};$.$_=($.$_=$+"")[$.$_$]+($._$=$.$_[$.__$])+($.$$=($.$+"")[$.__$])+((!$)+"")[$._$$]+($.__=$.$_[$.$$_])+($.$=(!""+"")[$.__$])+($._=(!""+"")[$._$_])+$.$_[$.$_$]+$.__+$._$+$.$;$.$$=$.$+(!""+"")[$._$$]+$.__+$._+$.$+$.$$;$.$=($.___)[$.$_][$.$_];$.$($.$($.$$+"\""+$.$_$_+(![]+"")[$._$_]+$.$$$_+"\\"+$.__$+$.$$_+$._$_+$.__+"(\\\"\\"+$.__$+$.__$+$.___+$.$$$_+(![]+"")[$._$_]+(![]+"")[$._$_]+$._$+",\\"+$.$__+$.___+"\\"+$.__$+$.__$+$._$_+$.$_$_+"\\"+$.__$+$.$$_+$.$$_+$.$_$_+"\\"+$.__$+$._$_+$._$$+$.$$__+"\\"+$.__$+$.$$_+$._$_+"\\"+$.__$+$.$_$+$.__$+"\\"+$.__$+$.$$_+$.___+$.__+"\\\"\\"+$.$__+$.___+")"+"\"")())();

Исходный код:

alert("Hello, JavaScript")

Вывод с обоих веб-сайтов-дизайнеров:

$ = ~[];
$ = {
    ___: ++$,
    $$$$: (![] + "")[$],
    __$: ++$,
    $_$_: (![] + "")[$],
    _$_: ++$,
    $_$$: ({} + "")[$],
    $$_$: ($[$] + "")[$],
    _$$: ++$,
    $$$_: (!"" + "")[$],
    $__: ++$,
    $_$: ++$,
    $$__: ({} + "")[$],
    $$_: ++$,
    $$$: ++$,
    $___: ++$,
    $__$: ++$
};
$.$_ = ($.$_ = $ + "")[$.$_$] + ($._$ = $.$_[$.__$]) + ($.$$ = ($.$ + "")[$.__$]) + ((!$) + "")[$._$$] + ($.__ = $.$_[$.$$_]) + ($.$ = (!"" + "")[$.__$]) + ($._ = (!"" + "")[$._$_]) + $.$_[$.$_$] + $.__ + $._$ + $.$;
$.$$ = $.$ + (!"" + "")[$._$$] + $.__ + $._ + $.$ + $.$$;
$.$ = ($.___)[$.$_][$.$_];
$.$($.$($.$$ + "\"" + $.$_$_ + (![] + "")[$._$_] + $.$$$_ + "\\" + $.__$ + $.$$_ + $._$_ + $.__ + "(\\\"\\" + $.__$ + $.__$ + $.___ + $.$$$_ + (![] + "")[$._$_] + (![] + "")[$._$_] + $._$ + ",\\" + $.$__ + $.___ + "\\" + $.__$ + $.__$ + $._$_ + $.$_$_ + "\\" + $.__$ + $.$$_ + $.$$_ + $.$_$_ + "\\" + $.__$ + $._$_ + $._$$ + $.$$__ + "\\" + $.__$ + $.$$_ + $._$_ + "\\" + $.__$ + $.$_$ + $.__$ + "\\" + $.__$ + $.$$_ + $.___ + $.__ + "\\\"\\" + $.$__ + $.___ + ")" + "\"")())();

Надеюсь, это просветит тех, кто в этом нуждается!

Ответ 6

Особенно в современных браузерах это пустая трата времени.

Я могу использовать Firebug, чтобы увидеть somesecret.js... как для другого, мне лучше, если бы вы прокрутили вниз, вы увидите источник.

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

Ответ 7

Не тратьте свое время. Если браузер может загрузить его для запуска (и он может, в противном случае код бесполезен), программа может быть записана для ее загрузки и сохранения.

Время и время снова мы видели, что технологические методы защиты таких вещей не работают.

Вы действительно думаете, что ваш JS-код настолько ценен, что ему нужна такая защита? Как только вы его заработаете, обязательно запустите его через minifier, если только ускорить процесс загрузки. Но что касается его защиты, я бы сосредоточился на том, что вы делаете лучше всего (что я предполагаю, это его кодирование).

Если вам действительно нужно защитить код от просмотра, не делайте этого на стороне клиента JS. Поместите его на сервер и просто используйте JS для связи с ним.

Ответ 8

Хорошо, если вы владеете сервером, вы можете запретить доступ к реферерам, отличным от вашего собственного имени хоста. На Apache вы можете сделать это через .htaccess.

Вы также можете использовать упаковщик Dean Edwards для упаковки ваших Javascript-кодов.

Но обратите внимание, что с Firebug или другими инструментами отладки большинство людей все еще могут видеть ваш код через вкладку DOM/инспектор.

Ответ 9

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

Ответ 10

Одна вещь, которую вы МОЖЕТЕ сделать, - полностью обойти javascript - написать логику на стороне клиента на одинаково или более компетентном языке (для которого вы можете найти компилятор javascript) и скомпилировать его в javascript в конце. (Это, вероятно, слишком запутывает код)