Как защитить файлы javascript? [дубликат]

этот вопрос уже есть ответ здесь:

Я знаю, что невозможно скрыть исходный код, но, например, если мне нужно связать файл JavaScript с моего CDN с веб-страницей, и я не хочу, чтобы люди знали местоположение и / или содержимое этого сценарий, это возможно?

например, чтобы связать скрипт с веб-сайта, мы используем:

<script type="text/javascript" src="http://somedomain.com/scriptxyz.js">
</script>

теперь можно скрыть от пользователя, откуда приходит скрипт, или скрыть содержимое скрипта и по-прежнему использовать его на веб-странице?

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

9 ответов


хороший вопрос с простым ответом: вы можете!

Javascript-это язык программирования на стороне клиента, поэтому он работает на машине клиента, поэтому вы не можете ничего скрыть от клиента.
Запутывание кода-хорошее решение, но этого недостаточно, потому что, хотя это и сложно, кто-то может расшифровать ваш код и "украсть" ваш скрипт.
Есть несколько способов сделать ваш код трудно украсть, но, как я уже сказал, Ничто не является пуля-доказательство.

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

<script type="text/javascript" src="myJs.js"></script>

и кто-то пытается получить доступ к myJs.js файл в браузере, ему не должен быть предоставлен доступ к источнику скрипта.
Например, если ваша страница написана на php, вы можете включить скрипт через include функция и пусть скрипт решит, если это безопасное", чтобы вернуть его источник.
В этом примере вам понадобится внешний " JS " (написанный на php) файл myJs.в PHP :

<?php
    $URL = $_SERVER['SERVER_NAME'].$_SERVER['REQUEST_URI'];
    if ($URL != "my-domain.com/my-page.php")
    die("/\*sry, no acces rights\*/");
?>
// your obfuscated script goes here

это будет включено в вашу главную страницу моя-страница.в PHP :

<script type="text/javascript">
    <?php include "myJs.php"; ?>;
</script> 

таким образом, только браузер мог видеть содержимое файла js.

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

<script id="erasable" type="text/javascript">
    //your code goes here
    document.getElementById('erasable').innerHTML = "";
</script>

это все просто простые хаки, которые не могут, и я не могу подчеркнуть это достаточно : не могу полностью защитить ваш JS-код, но они могут наверняка разозлить кого-то, кто пытается "украсть" ваш код.

обновление:

Я недавно наткнулся на очень интересная статья написано Патрик Конкретные Шаги о том, как скрыть ваш код js, и он показывает другой подход: вы можете кодировать исходный код в изображение! Конечно, это тоже не пуленепробиваемое, но это другое забор что вы можете построить вокруг своего кода.
Идея этого подхода заключается в том, что большинство браузеров могут использовать элемент canvas для манипулирования пикселями на изображениях. И поскольку пиксель холста представлен 4 значениями (rgba), каждый пиксель может иметь значение в диапазоне 0-255. Это означает, что вы можете хранить символ (фактический код ascii) в каждом пикселе. Остальные кодирование / декодирование тривиально.
Спасибо, Патрик!


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


читать это. Он имеет очень хороший способ скрыть ваш код как в источнике представления, так и в отладочном инструменте, таком как firebug.


насколько мне известно, это невозможно.

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

Если вы защищаете паролем свои файлы JS, то браузер не сможет получить к ним доступ, победив цель иметь JS в первую очередь.


просто с моей головы, вы могли бы сделать что-то вроде этого (если вы можете создавать сценарии на стороне сервера, что звучит так, как вы можете):

вместо загрузки скрипта, как обычно, отправьте запрос AJAX на страницу PHP (это может быть что угодно, я просто использую его сам). Попросите PHP найти файл (возможно, на непубличной части сервера), откройте его с помощью file_get_contents, и вернуть (читай: echo) содержимое в виде строки.

когда эта строка возвращается в JavaScript, создать новый script тег, заполнить его innerHTML С кодом, который вы только что получили, и прикрепить тег на страницу. (Ты!--10-->может есть проблемы с этим; innerHTML не может быть, что вам нужно, но вы можете экспериментировать.)

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

EDIT: я думал, ты только пытаешься скрыть расположение скрипта. Это, очевидно, не очень поможет, если вы пытаетесь скрыть сам сценарий.


забудьте об этом, это не выполнимо.

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


Компилятор Закрытия Google, Юи компрессора, Minify, /упаковщик/... etc, варианты для обжатия / obfuscating ваших кодов JS. Но ни один из них не может помочь вам скрыть свой код от пользователей.

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

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


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


Как я сказал в комментарии, который я оставил на gion_13 ответ раньше (пожалуйста, прочитайте), вы действительно не можете. Не с javascript.

Если вы не хотите, чтобы код был доступен на стороне клиента (= stealable без больших усилий), мое предложение состояло бы в том,чтобы использовать PHP (ASP,Python,Perl,Ruby, JSP + Java-сервлеты), который обрабатывается на стороне сервера, и только результаты выполнения вычисления/кода подаются пользователю. Или, если вы предпочитаете, даже Flash или Java-апплет, который позволяет стороне клиента вычисление / выполнение кода, но компилируются и, следовательно, сложнее реверсировать двигатель (не невозможно, таким образом).

только мои 2 цента.