Вопрос

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

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

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

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

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

Это было полезно?

Решение

Хороший вопрос с простым ответом: Вы не можете!

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

это будет включено на вашу главную страницу my-page.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 для манипулирования пикселями на изображениях. А поскольку Pixel Canvas представлен 4 значения (RGBA), каждый пиксель может иметь значение в диапазоне 0-255. Это означает, что вы можете хранить персонажа (фактическое это код ASCII) в каждом пикселе. Остальная часть кодирования/декодирования тривиальна.
Спасибо, Патрик!

Другие советы

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

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

От моих знаний, это невозможно.

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

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

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

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

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

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

РЕДАКТИРОВАТЬ: Я думал, ты только пытался скрыть расположение сценария. Это, очевидно, не поможет, если вы пытаетесь скрыть сам скрипт.

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

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

Google Closure Compiler, Юи Компрессор, Министерство, /Упаковщик/... и т. Д., Это варианты сжатия/запутывания ваших кодов JS. Но никто из них не может помочь вам скрыть ваш код от пользователей.

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

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

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top