Как я могу запутать или сделать нечитаемые мои файлы JavaScript?

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

Я понял, что при запуске приложения на клиентской стороне клиент может видеть весь исходный код, просматривая исходный код страницы (Ctrl + U).

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

Я хочу сделать что-то вроде того, что делает Facebook. При просмотре Facebook источник пользователь не может повторно использовать его исходный код или даже понять его.

Я googled и обнаружил, что этот процесс называется обфускацией, но это не работает для меня.

Я попробовал это:

http://www.javascriptobfuscator.com/default.aspx

а также

http://dean.edwards.name/packer/

а также

http://www.daftlogic.com/projects-online-javascript-obfuscator.htm

даже я пробовал http://www.jasob.com/

Но это бесполезно для меня.

Ответ 1

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

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

Например, файлы JS facebook просто подчёркиваются, скорее всего, только по причинам пропускной способности/производительности.


Самый простой способ минимизировать ваш JavaScript - это использовать веб-сервис Google для этого: http://closure-compiler.appspot.com/home
Обратите внимание, что он имеет ограничение 1 МБ, поэтому, если ваш JS настолько огромен, вам может потребоваться загрузить Java-based minifier для его локального запуска.

Ответ 2

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

Ответ 3

Поскольку мне нужно уменьшить мой исходный код javascript, я ищу javascript-программу, которая сама по себе делает код javascript.

Почему javascript minifier? Потому что, я пишу некоторый рандомизированный код javascript от веб-сервера к клиенту.

Я должен использовать "node.js" на веб-сервере для выполнения javascript-программы, которая генерирует код javascript и минимизирует ее на лету и отправляет ее клиенту.

Эта javascript-программа является: программой шифрования и дешифрования. Результат кода javascript для клиента должен содержать функцию javascript, которая расшифровывает каждую часть json или шестнадцатеричной версии зашифрованных данных. Функция выполняет несколько плюсов, минусов и умножений целых чисел. Иногда я могу сгенерировать условие (if, then и else) для вычисления двух разных операций. Эта функция используется для дешифрования двух или более входных параметров.

Эта рандомизированная функция: каждый раз, когда клиент запрашивает некоторые частные данные, веб-сервер генерирует две разные функции javascript: один для шифрования и один для расшифровки. Функция дешифрования отправляется клиенту. Функция шифрования используется веб-сервером для шифрования и отправки личных данных клиенту. Это имеет смысл для обфускации: каждый раз, когда процесс выполняется, каждый раз, когда функция отправки полностью отличается.

И, чтобы убедить, что шифрование/дешифрование очень безопасно, я добавляю для клиента табличное преобразование значений двух или более параметров; но, табличные значения генерируются, фактически, функцией, написанной только для веб-сервера, и содержат некоторые числовые константы, которые НИКОГДА не отправляются клиенту. Таким образом, любой из тех, кто хочет расшифровать, должен иметь значение констант.

Мне объяснили этот процесс, потому что:

  1. вы принимаете некоторые вещи об обфускации в исходном коде javascript; но обфускация в javascript еще не реализована веб-сервером и браузерами... возможно, это может произойти... но какие решения полезны при помощи "SSL-ize" для всей передачи через Интернет.

  2. Он позволяет шифровать и дешифровать с помощью функций шифрования/дешифрования, которые могут быть прочитаны. И, без стоимости SSL-сертификатов. Даже "человек посередине" расшифровал бы зашифрованные данные; для этого он просто должен выполнить функцию javascript. Хорошо... но представьте, что функция расшифровки javascript также включена... тогда "человек посередине" должен выполнить функцию дешифрования, а затем снова расшифровать дешифрованный контент, который является функцией javascript для дешифрования зашифрованных данных.

И представьте, если веб-сервер задает вопрос клиенту, а уникальный ответ обрабатывается вычислением результатов клиента (который не отправляется через Интернет)... невозможно ответить "человеку посередине".

Проверьте мою идею; Я жду комментариев от кого-то.