Как я могу скрыть (защитить) JavaScript?

Я хочу создать приложение JavaScript, не имеющее открытого исходного кода, и поэтому хочу узнать, как обфускировать мой код JS? Это возможно?

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

JohnFx 24.01.2009 03:46

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

Donal Fellows 09.06.2010 00:42

Вы можете попробовать этот один в Интернете и использовать функции сжатия CSS и JS.

Ivan Baev 06.06.2012 11:47

Или utf-8.jp/public/aaencode.html

Jason C 24.03.2014 09:28

вот другое решение: stackoverflow.com/questions/2060984/…

T.Todua 10.06.2014 21:21

@JasonC Ха-ха, я не видел этого раньше, но я видел потрясающий utf-8.jp/public/jjencode.html

TheZ 17.08.2014 09:34

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

Sven Slootweg 29.03.2015 21:53

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

Evan Carslake 19.07.2015 01:35

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

Benjamin 27.03.2016 23:09
Лучший обфускатор javascript thats how i make it work. It is even not decoded by js beautifier. ;)
abhishek bagul 03.05.2016 15:08

Большинство упомянутых здесь обфускаторов можно отменить, просто установив window.eval = console.info.bind(console); перед запуском скрипта. В лучшем случае результат после запуска будет таким же, как при запуске минификатора на оригинале, поэтому я не вижу никаких реальных преимуществ использования выделенного обфускатора перед простым использованием минификатора. Тем более, что запутанный код обычно более раздут (и загружается медленнее), чем минимизированный код.

Hjulle 02.06.2016 14:59

В заключение: перед тем, как выбрать обфускатор, попробуйте запустить запутанный пример после установки var oldEval = window.eval; window.eval= function(x){console.info(x); return oldEval(x)}. Затем вставьте результат в jsbeautifier и посмотрите, выглядит ли он по-прежнему запутанным. Если нет, выберите другой обфускатор.

Hjulle 02.06.2016 16:49

Или еще проще: просто вставьте пример в deobfuscatejavascript.com. Результаты "лучшего обфускатора javascript" (согласно @abhishekbagul) после запуска деобфускатора точно такие же, как и у исходного источника, даже включая комментарии!

Hjulle 02.06.2016 16:59
Этот онлайн-обфускатор is really simple to use, or if you're using Node.js or have it installed, you can use this project: javascript-обфускаторnpm install --save-dev javascript-obfuscator which is open source and really good.
Tiago 25.10.2016 04:23

Используйте Encode.js: encodejs.devincity.com

nachshon f 30.04.2017 20:35

Я сделал для этого решение: github.com/blackmiaool/decent-messup

blackmiaool 10.06.2017 15:03

Для каждого обфускатора можно сделать деобфускатор.

Rainb 11.07.2018 15:37

Попробуйте переместить свой код в рабочие потоки и использовать importScripts ("yourscript.js"); их будет труднее увидеть в отладчике, поскольку они будут доступны только при загрузке (при входе в систему) и по умолчанию скрыты.

ejectamenta 04.12.2018 21:02

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

Scott Smith 12.06.2019 11:01

@Benjamin: аргумент не ошибочный, он просто идеально согласован и политически корректен в соответствии с текущей повесткой дня, которая гласит: «Работайте для развлечения и демонстрации, и позволяйте другим загребать ваши деньги».

sunny moon 04.09.2020 13:53
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
726
21
425 970
24
Перейти к ответу Данный вопрос помечен как решенный

Ответы 24

Ответ принят как подходящий

Обфускация:

Попробуйте Компрессор YUI. Это очень популярный инструмент, созданный, улучшенный и поддерживаемый командой Yahoo UI.

Вы также можете использовать:

ОБНОВЛЕНИЕ: этот вопрос был первоначально задан более 10 лет назад, и YUI больше не поддерживается. Google Closure Compiler все еще используется, и UglifyJS можно запускать локально через диспетчер пакетов узлов: npm install -g uglify-js.

Данные частной строки:

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

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

Примечание:

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

Я хочу добавить, что выполнение кодирования base64 не принесет никакой пользы для безопасности, поскольку это тривиально обратимая процедура. Даже шифрование не поможет, если оно будет расшифровано на стороне клиента. Единственный способ обеспечить безопасность строки - сделать так, чтобы клиент видел ТОЛЬКО зашифрованную строку, и она передается в

Claudiu 12.10.2008 01:13

сервер для дальнейшей обработки.

Claudiu 12.10.2008 01:14

К вашему сведению, онлайн-компрессор YUI можно найти здесь: refresh-sf.com/yui

mtness 19.01.2010 17:45

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

Ben 01.01.2012 09:27

Когда я выполняю минимизацию с помощью YUI Compressor, я проверяю, что он использует «безопасные» методы минимизации, то есть сохраняет точки с запятой --preserve-semi. Перезапись частных переменных в a, b, c и т. д. Обычно безопасна. Еще я делаю так, чтобы минификатор ставил разрыв строки после каждой точки с запятой в коде --line-break 0. Затем в процессе производства, если это ошибка, у меня меньше всего действительная справочная линия для работы, и я могу найти этот код в своей копии для разработки. В противном случае вы просто получите ошибку в огромной строке кода и не поймете, где она находится.

zuallauz 15.02.2013 05:36

Используйте Encode.js: encodejs.devincity.com

nachshon f 21.04.2016 18:47

@nachshonf почему? Чем Encode.js лучше, чем упомянутые выше более популярные решения?

jj_ 23.05.2016 15:38

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

Итак, если вы не хотите жертвовать производительностью, вы можете действовать только с именами переменных и функций, например. заменив их на a, b ... aa, ab ... или a101, a102 и т. д. И, конечно же, удалите столько пробелов / символов новой строки, сколько сможете (это то, что делают так называемые компрессоры JS) .
Обфускация строк снизит производительность, если вам придется их зашифровать и расшифровать в реальном времени. Плюс отладчик JS может показать окончательные значения ...

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

С этой целью есть несколько вариантов, которые я использовал до некоторой степени сверхурочно:

  • Компрессор YUI. Компрессор JavaScript Yahoo! Делает хорошую работу по сжатию кода, что сокращает время его загрузки. Есть небольшой уровень обфускации, который работает относительно хорошо. По сути, Compressor изменит имена функций, удалит пробелы и изменит локальные переменные. Это то, что я использую чаще всего. Это инструмент на основе Java с открытым исходным кодом.

  • JSMin - это инструмент, написанный Дугласом Крокфордом, который стремится минимизировать ваш исходный код JavaScript. По собственным словам Крокфорда, «JSMin не запутывает, но затуманивает». Основная цель - уменьшить размер исходного кода для более быстрой загрузки в браузерах.

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

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

Schwern 26.10.2008 02:27

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

Cris Stringfellow 22.02.2012 15:45

Вы пробовали обфускатор zeroify.com? Он использует минификацию и сжатие, но также переименовывает классы и идентификаторы, чтобы затруднить понимание назначения классов и объектов.

SED 20.05.2017 05:02

@SED Это шутка, они, кажется, просто заменяют имена переменных / функций на ZER0O00OIFY , используя различные комбинации [o, O, 0]. Если бы я действительно хотел прочитать этот код, я мог бы, и поиск / замена в текстовом редакторе заняли бы несколько минут. Если люди захотят прочитать ваш JS, они это сделают. Привыкнет любой клиентский JS, который кто-то действительно хочет использовать. Либо запустите его на стороне сервера, либо преодолейте это. Скорее всего, ваш код не является уникальным или новым. Наклейте на него лицензию, если очень хотите.

Peter R 22.08.2017 00:45

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

SED 23.08.2017 02:06

@SED Я не знаю ни одного программиста, который не смог бы найти / заменить кучу переменных [ZER0O00OIFY, ZER0000OIFY, ZEROO00OIFY, ZEROOO0OIFY] хотя бы на [var1, var2,..] в течение одной минуты. Я могу буквально деуглифицировать, изменить отступ и искать / заменять имена переменных в течение двух минут. И нет, я умнее среднестатистического Младшего Дев. Простой факт в том, что НЕТ способа скрыть JS на стороне клиента. Вы можете купить себе 5 минут, МАКС, но это бесполезно. Этот материал на самом деле предназначен для того, чтобы продать кому-то, кто не знает кода дополнительной «безопасности». Никто, кто когда-либо писал строчку на JS, не купился бы на эту чушь.

Peter R 23.08.2017 10:11

@PeterR "Я могу буквально деуглифицировать, изменить отступ и искать / заменять имена переменных в течение двух минут" - конечно, продолжайте и попробуйте это на многопроходном минифицированном, запутанном, 20-мегабайтном пакете кодовой базы со структурой, на понимание которой уходят недели даже с исходным, прокомментированным исходным кодом. И что еще больше усложняет задачу, существуют инструменты обфускации, которые намеренно нарушают работу вашего кода при изменении отступов, строк и т. д.

John Weisz 01.04.2019 23:53

Я могу порекомендовать Утилита JavaScript Патрика Дж. О'Нила. Он может запутывать / сжимать и сжимать, и, похоже, он довольно хорош в этом. Тем не менее, я никогда не пробовал интегрировать его в какой-либо сценарий сборки.

Что касается обфускации и минимизации - я не большой поклонник первого. Это делает отладку невозможной (ошибка в строке 1 ... "подождите, есть только одна строка"), и им всегда требуется время для распаковки. Но если вам нужно ... хорошо.

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

rw-nandemo 18.06.2014 20:19

В настоящее время UglifyJS кажется лучшим выбором. Автор тоже классный парень! :)

Tsvetomir Tsonev 17.02.2016 16:47

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

Luca Steeb 04.08.2016 15:26

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

Кто-то упомянул base64, чтобы обеспечить безопасность строк. Это ужасная идея. Base64 сразу узнают люди, которые захотят перепроектировать ваш код. Первое, что они сделают, - это его раскодируют и посмотрят, что это такое.

@Claudiu Пожалуйста, объясните, что вы имеете в виду под серверным javascript. Я не понял.

Vivek Kodira 12.10.2008 08:10

Куда бы я ни пошел, самый распространенный ответ на вопрос "как я могу скрыть свой Javascript?" это «не стоит беспокоиться об этом, потому что кто-то может это не запутать». Это не совсем ответ.

Travis Wilson 31.07.2009 20:00

@Vivek: Немного поздно, но на самом деле я имел в виду "серверный код". Можно запускать javascript не в браузере, а только на сервере, но я не знаю, насколько это распространено.

Claudiu 07.10.2010 02:00

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

Claudiu 07.10.2010 02:01

Верно. Что никоим образом не отвечает на вопрос «как я могу запутать свой JavaScript». Обфускация - это не абстрактное понятие, а техническое. Оператор просто спросил "как?"

Madbreaks 19.03.2014 10:10

@Madbreaks: Вопрос был в том, чтобы не делать его код открытым. Непосредственный технический ответ - принятый, но лучший ответ в контексте (например, что вы действительно пытаетесь сделать?), ИМО, у вас не может быть клиентского javascript, который не является открытым исходным кодом, потому что у каждого есть источник, независимо от того, как вы его запутываете. В любом случае здесь есть оба ответа, и люди могут читать и извлекать пользу из обоих.

Claudiu 19.03.2014 10:58

Ответ: «Вы не можете. И вот почему ...». Возможно, это не тот ответ, который искал ОП, но это ответ на его вопрос с обоснованием. Я думаю, что Клаудиу и другие респонденты хорошо поработали, фактически ответив на вопрос.

U007D 30.03.2015 01:47

Ответ: wasm! Напишите код на C, а затем переведите его в wasm. ПОДДЕРЖКА БУДЕТ ПОДДЕРЖИВАЕТСЯ В СЛЕДУЮЩИЕ 5 ЛЕТ. ЖДАТЬ. ИЛИ УСТАНОВИТЕ Chrome Canary, чтобы попробовать.

user6820627 02.10.2016 06:07

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

Обфускация JS обычно делается для уменьшения размера скрипта, а не для его «защиты». Если вы находитесь в ситуации, когда не хотите, чтобы ваш код был общедоступным, Javascript - неподходящий язык.

Существует множество инструментов, но большинство из них не зря содержат слово «компрессор» (или «минификатор»).

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

Поговорите с юристом о законе об интеллектуальной собственности и о ваших юридических вариантах. "Открытый источник" не означает «люди могут читать источник». Вместо этого Open Source - это особая модель лицензирования, дающая разрешение на свободное использование и изменение вашего кода. Если вы не предоставляете такую ​​лицензию, люди, копирующие ваш код, нарушают правила, и (в большинстве стран мира) у вас есть законные возможности остановить их.

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

Смотрите мой полный ответ об обфускаторах здесь.

+1 к юристу, но это может не сработать в других странах / юрисдикциях.

jmort253 17.02.2011 02:07

Юристы, вероятно, создают больше затрат / проблем, чем потерянный код, очень хорошо подумайте и найдите много денег, чтобы нанять юристов !!

andora 10.03.2011 16:14

-1: Я считаю, что найти юриста, разбирающегося в JavaScript, будет сложно ... Не говоря уже о гонорарах и количестве времени, необходимом для поиска «нарушителей». Может ли кто-то действительно нарушать лицензию, которая спрятана в файлах HTML / JavaScript, если он никогда ничего не подписывал? +1 для вызовов AJAX.

Alerty 30.10.2011 21:14

@Alerty 1) Лицензии в основном касаются использования предоставление материалов, защищенных авторским правом. У вас мало прав на его использование без лицензии. Вам не нужно подписывать его, чтобы получить права. Лицензия отличается от контракта. 2a) Поскольку речь идет о людях, копирующих и использующих HTML / Javascript без разрешения, лицензия не «похоронена», а прямо там, где берется вещь. 2b) У вас мало прав на использование чужих материалов, защищенных авторским правом, без лицензии. 3) Юристу не нужно понимать Javascript, только закон об интеллектуальной собственности.

Schwern 31.10.2011 23:06

@Schwern: Логично предположить, что должно быть какое-то лицензионное соглашение о программном обеспечении для проверки условий использования материалов, защищенных авторским правом. Невозможно увидеть эти условия, не загрузив страницу, содержащую лицензию в файле JavaScript. Так, например, если в лицензии указано, что конечный пользователь должен отдавать 100 долларов за каждое использование, конечный пользователь не сможет принять это до использования материала, защищенного авторским правом. Другими словами, это было бы несправедливо и было бы видно, что это мошенничество.

Alerty 01.11.2011 08:19

@Alerty Не будь тупицей. Речь идет о наказании тех, кто копирует файл для использования на своем сайте без разрешения. Вы говорите о контракте, а не о лицензии. Контракты требуют взаимного согласия и представляют собой компромисс. Лицензии дают вам право использовать интеллектуальную собственность. Лицензии - это один из способов (владелец выдает вам вещи), вы не обязаны подписывать, потому что вы ничего не отдаете. Многие «Лицензионные соглашения на программное обеспечение» на самом деле являются контрактами, потому что они выходят за рамки лицензирования собственности и порой приводят к нелепым вещам, например, к праву на подачу иска.

Schwern 02.11.2011 04:01

Допустим, вы хотели сделать фотошоп из холста, нет возможности отправлять данные туда и обратно. Пока все не получат 1 Гб / с интернета. Так что да, некоторые программы нельзя заработать на javascript. Следовательно, у них должна быть другая структура бизнеса. Предоставьте только облачное хранилище, сделайте его открытым исходным кодом, внедряйте инновации так быстро, что оставьте позади все копировальные устройства. И т.п.

Muhammad Umer 26.07.2013 09:29

Бесплатный онлайн-обфускатор против сложного дорогого юриста ... Интересно, кого я выберу?

markasoftware 09.08.2013 23:42

Это почти как если бы люди, ищущие это, не задумывались о том, сколько пользы и сколько усилий потребуется, чтобы «защитить» их работу ...

Casey 13.02.2014 21:48

Проголосовало против слова «наймите адвоката». Какое неприятное заявление. Вы не можете защищать авторские права на Javascript, запущенный в WWW. Это похоже на ту же логику, что и авторское право на собственный класс CSS. Удачи.

NiCk Newman 18.05.2015 08:20

@NiCkNewman Хотя законы об авторском праве различаются от страны к стране, в большинстве стран вы (или компания, которой вы передали свои авторские права) имеете авторские права на код, который вы пишете, включая HTML, Javascript и CSS. Во многих странах вы автоматически получаете авторское право на свою работу. Размещение его в сети не меняет этого. Возможно, вы захотите поговорить с юристом или провести какое-то исследование, если вы работаете в сфере публикации (а если вы программист, то так и есть) и не понимаете авторское право и лицензирование, ваши права на ваши работы и права других.

Schwern 18.05.2015 19:47

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

user626528 02.10.2018 23:14

@ user626528 Кто угодно в мире может попытаться взломать эти дверные замки. Они могут пытаться сломать их сколько угодно раз. Вы не можете знать, пытаются ли люди взломать ваш замок. Если они ворвутся, вы никогда не узнаете. Высококачественные автоматические пикировки (декомпиляторы / деобфускаторы) находятся в свободном доступе. Это существенные различия между физической безопасностью и онлайн-безопасностью.

Schwern 02.10.2018 23:38

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

user626528 03.10.2018 00:06

The only way you can really protect your code is to not ship it. Move the important code server-side and have your public Javascript code do Ajax calls to it. nosense, если речь идет о лежачем полицейском, взятие кода из вызовов ajax займет меньше времени, чем обратная передача. Правильная обфускация сделает работу, "лежачий полицейский" - это часть игры, так что давайте взломщикам не торопимся, а мы сделаем эту работу.

jamesjara 05.01.2019 17:45

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

sunny moon 04.09.2020 13:40

Это минимизирует, но не запутывает. Если вы не хотите использовать командную строку Java, вы можете вставить свой javascript в веб-форму.

Примечание: ссылка теперь мертва.

Scott C Wilson 21.04.2013 23:12

@ScottWilson спасибо, обновил

Chris S 22.04.2013 15:49

У меня сложилось впечатление, что некоторые предприятия (например, JackBe) помещают зашифрованный код JavaScript в файлы * .gif, а не в файлы JS, в качестве дополнительной меры обфускации.

В качестве обфускатора / компрессора JavaScript / HTML / CSS вы также можете попробовать Пату Дигуа.

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

JQuery недавно переключился с YUI Compresser на Closure Compiler и увидел "солидное улучшение"

да, но недавно они покинули компилятор Closure и теперь используют UglifyJS. Код JQuery был ошибочным после сжатия компилятором закрытия

Chielus 24.05.2011 11:32

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

iConnor 17.08.2013 03:41

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

Madbreaks 26.03.2014 03:18

@Madbreaks с расширенной оптимизацией (developers.google.com/closure/compiler/docs/api-tutorial3) минимизирует код до точки запутывания. Например, переменные можно переименовывать для краткости.

Jason Hall 27.03.2014 02:43

Google тоже не вариант для безопасности

Fillipo Sniper 17.10.2018 03:44

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

Подписка на JScrambler очень-очень дорогая ... Самая дешевая подписка требует минимальной цены на 3 месяца 145 долларов - это безумие.

barbushin 11.08.2013 15:16

Теперь у них есть бесплатный план. Остальные планы подписки по-прежнему такие же дорогие.

user7610 02.09.2013 01:30

Бесплатный план включает только оптимизацию и минификацию.

Jean Hominal 24.10.2014 19:49

«Бесплатный план включает оптимизацию и минификацию», да, нет. Обфускация и оптимизация несовместимы, извините.

NiCk Newman 18.05.2015 08:17

Глядя на веб-сайт JScrambler сегодня и другие тарифные планы, я не вижу бесплатного варианта. Только бесплатная пробная версия ..

KDT 30.01.2016 20:54

Я был очень разочарован JScrambler, потому что для него нет хорошего клиента C#, а документация по API не сообщает вам достаточно, чтобы можно было выполнять остальные вызовы с нуля, но их служба поддержки делает это стоящим денег моего босса.

Chad Hedgcock 31.03.2016 04:20

В отличие от большинства других ответов, я предлагаю против YUI Compressor; вы должны использовать Закрытие Google.

Не сильно, потому что он сжимает больше, но в основном потому, что он улавливает ошибки javascript, такие как a = [1,2,3,];, из-за которых IE выходит из строя.

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

phil294 29.11.2015 16:35

Если вы используете библиотеку JavaScript, подумайте о Dojo Toolkit, который совместим (после незначительных изменений) с компиляцией в расширенном режиме компилятора Closure.

Dojo - единственная библиотека JavaScript Совместим с компилятором Closure

Код, скомпилированный в расширенном режиме Closure, практически невозможно реконструировать, даже пропустив через beautifier, поскольку кодовая база весь (включая библиотеку) запутана. Кроме того, в среднем он на 25% меньше.

Код JavaScript, который просто минифицирован (YUI Compressor, Uglify и т. д.), Легко реконструировать после прохождения через beautifier.

Я бы предложил сначала минимизировать что-то вроде YUI Compressor, а затем преобразовать все строки и числа в HEX-значения, используя что-то вроде http://www.javascriptobfuscator.com/

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

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

См .: Онлайн-инструмент сжатия Javascript и выберите Packer (Dean Edwards) из раскрывающегося списка.

Это бессмысленно. Его легко распаковать с помощью jsbeautifier.org

Maciej Krawczyk 18.11.2017 03:28

Я использовал это в прошлом, и он хорошо справляется. Это не бесплатно, но вам обязательно стоит взглянуть. Обфускатор и кодировщик JavaScript

Я использую утилиту Closure-Compiler для обфускации java-скриптов. Он минимизирует код и имеет больше возможностей для обфускации. Эта утилита доступна в коде Google по следующему URL-адресу:
. Инструменты закрытия

Но сейчас я много слышу об UglifyJS. Вы можете найти различные сравнения между Closure Compiler и UglifyJS, в которых Uglify кажется победителем. UglifyJS: новый быстрый компрессор JavaScript для Node.js, не уступающий закрытию

Скоро я дам шанс UglifyJS.

Попробуйте этот инструмент Обфускатор Javascript

Я использовал его в своей игре HTML5, он не только уменьшил его размер с 950 КБ до 150, но и сделал нечитаемый код компилятора закрытия и минификаторы обратимым. Я лично не знаю, как отменить эту обфускацию.

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

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

Пользователи по-прежнему могут просматривать ваш источник, но гораздо сложнее расшифровать, когда ваши частные переменные преобразованы из чего-то вроде _sUserPreferredNickName в a.

Движок автоматически подсчитает количество целевых переменных и расставит их по приоритетам, чтобы получить максимальное сжатие.

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

Джейсон больше похож на минификатора, чем на обфускатора. Я что-то упускаю?

Alan McBee 20.08.2013 03:03

Вам определенно стоит подумать о том, чтобы взглянуть на Обфускриптор.

Я выхожу за рамки типичных приемов минимизации Javascript, которые мы видели в других инструментах, таких как Компрессор YUI или Закрытие Google.

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

Спасибо за ссылку! Просто попробовал обфускриптор и код действительно зашифрован (без ключа ???). И сжал мой скрипт с 211 до 36 Кб!

user411103 26.03.2012 01:41

Обратите внимание, что Obfuscriptor предупреждает вас, что он не работает с IE. Для некоторых это нарушает условия сделки.

Alan McBee 20.08.2013 02:42

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

buzoherbert 01.02.2016 12:47

первая ссылка мертва. "Обфускриптор"

Alp Altunel 17.05.2017 17:46

Вы пробовали Bananascript? Он производит сильно сжатый и совершенно нечитаемый код.

он хорошо сжимает код, но просто измените eval() в последней строке на console.info(), и ваша консоль выдаст все это

LobsterMan 20.03.2013 22:48

Что бы я сделал:

А. Тролль хакера!

Это будет во второй части моего фальшивого / запутанного секретного кода javascript LAUNCHER. Тот, который вы видите в исходном коде.

Что это за код?

  1. загружает реальный код
  2. устанавливает собственный заголовок
  3. публикует пользовательскую переменную

var ajax=function(a,b,d,c,e,f){
 e=new FormData();
 for(f in d){e.append(f,d[f]);};
 c=new XMLHttpRequest();
 c.open('POST',a);
 c.setRequestHeader("Troll1","lol");
 c.onload=b;
 c.send(e);
};
window.onload=function(){
 ajax('Troll.php',function(){
  (new Function(atob(this.response)))()
 },{'Troll2':'lol'});
}

Б. Немного запутать код

Это что?

  1. это тот же код, что и выше в base64
  2. это не СЕКРЕТНЫЙ код javascript

(new Function(atob('dmFyIGFqYXg9ZnVuY3Rpb24oYSxiLGQsYyxlLGYpe2U9bmV3IEZvcm1EYXRhKCk7Zm9yKGYgaW4gZCl7ZS5hcHBlbmQoZixkW2ZdKTt9O2M9bmV3IFhNTEh0dHBSZXF1ZXN0KCk7Yy5vcGVuKCdQT1NUJyxhKTtjLnNldFJlcXVlc3RIZWFkZXIoIlRyb2xsMSIsImxvbCIpO2Mub25sb2FkPWI7Yy5zZW5kKGUpO307d2luZG93Lm9ubG9hZD1mdW5jdGlvbigpe2FqYXgoJ1Ryb2xsLnBocCcsZnVuY3Rpb24oKXsgKG5ldyBGdW5jdGlvbihhdG9iKHRoaXMucmVzcG9uc2UpKSkoKX0seydUcm9sbDInOidsb2wnfSk7fQ==')))()

C Создать трудно отображаемый php файл с реальным кодом внутри

Что делает этот php-код?

  1. Проверяет правильность реферера (домен / каталог / код вашего лаунчера)
  2. Проверяет наличие настраиваемого ЗАГОЛОВКА
  3. Проверяет пользовательскую переменную POST

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

<?php
$t1=apache_request_headers();
if (base64_encode($_SERVER['HTTP_REFERER'])=='aHR0cDovL2hlcmUuaXMvbXkvbGF1bmNoZXIuaHRtbA=='&&$_POST['Troll2']=='lol'&&$t1['Troll1']='lol'){
 echo 'ZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKSkuaW5uZXJUZXh0PSdBd2Vzb21lJzsNCg==';//here is the SECRET javascript code
}else{
 echo 'd2luZG93Lm9wZW4oJycsICdfc2VsZicsICcnKTt3aW5kb3cuY2xvc2UoKTs=';
};
?>

реферер base64 = http://here.is/my/launcher.html

СЕКРЕТНЫЙ javascript = document.body.appendChild(document.createElement('div')).innerText='Awesome';

ПОДДЕЛКА = window.open('', '_self', '');window.close();

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

ТАК ... есть ли простой способ получить код? document.body.appendChild(document.createElement('div')).innerText='Awesome';

Я не уверен, работает ли это, но я использую Chrome и проверяю элементы, ресурсы, сеть, источники, временную шкалу, профили, аудит, но я не нашел строку выше.

note1: если вы откроете URL-адрес Troll.php из Inspect element-> network в chrome, вы получите поддельный код.

note2: весь код написан для современных браузеров. polyfill требуется намного больше кода.

РЕДАКТИРОВАТЬ

launcher.html

<!doctype html><html><head><meta charset = "utf-8"><title></title><script src = "data:application/javascript;base64,KG5ldyBGdW5jdGlvbihhdG9iKCdkbUZ5SUdGcVlYZzlablZ1WTNScGIyNG9ZU3hpTEdRc1l5eGxMR1lwZTJVOWJtVjNJRVp2Y20xRVlYUmhLQ2s3Wm05eUtHWWdhVzRnWkNsN1pTNWhjSEJsYm1Rb1ppeGtXMlpkS1R0OU8yTTlibVYzSUZoTlRFaDBkSEJTWlhGMVpYTjBLQ2s3WXk1dmNHVnVLQ2RRVDFOVUp5eGhLVHRqTG5ObGRGSmxjWFZsYzNSSVpXRmtaWElvSWxSeWIyeHNNU0lzSW14dmJDSXBPMk11YjI1c2IyRmtQV0k3WXk1elpXNWtLR1VwTzMwN2QybHVaRzkzTG05dWJHOWhaRDFtZFc1amRHbHZiaWdwZTJGcVlYZ29KMVJ5YjJ4c0xuQm9jQ2NzWm5WdVkzUnBiMjRvS1hzZ0tHNWxkeUJHZFc1amRHbHZiaWhoZEc5aUtIUm9hWE11Y21WemNHOXVjMlVwS1Nrb0tYMHNleWRVY205c2JESW5PaWRzYjJ3bmZTazdmUT09JykpKSgp"></script></head><body></body></html>

Troll.php

<?php $t1=apache_request_headers();if (/*base64_encode($_SERVER['HTTP_REFERER'])=='PUT THE LAUNCHER REFERER HERE'&&*/$_POST['Troll2']=='lol'&&$t1['Troll1']='lol'){echo 'ZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKSkuaW5uZXJUZXh0PSdBd2Vzb21lJzsNCg==';}else{echo 'd2luZG93Lm9wZW4oJycsICdfc2VsZicsICcnKTt3aW5kb3cuY2xvc2UoKTs=';}; ?>

о, и да, я бы также запутал код javascript.

cocco 04.07.2013 15:14

Это то, о чем я как раз думал, троллинг взломщика. Хотелось бы увидеть что-то подобное без использования PHP :)

pgarciacamou 19.05.2015 20:33

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

cocco 19.05.2015 20:38

Я думаю, это не какая-то запутанность. однако знает, как открыть консоль, он также может знать о кодировании / декодировании base64, очень просто.

T.Todua 14.12.2017 14:44

Вы не можете защитить код на стороне клиента: просто нажмите F12 в Google Chrome, приостановить выполнение javascript, и вы получите все строки, даже зашифрованные. Украсить это и переименовать переменные, и вы получите почти исходный код.

Если вы пишете javascript на стороне сервера (например, NodeJS), боитесь, что кто-то взломает ваш сервер, и хотите усложнить работу хакеру, давая вам больше времени для восстановления доступа, тогда используйте компиляторы javacript:

Вам нужно использовать Closure Compiler для расширенной компиляции, поскольку это единственный инструмент, который переименовывает все ваши переменные, даже если они используются в нескольких файлах / модулях. Но у него просто проблема: он работает, только если вы напишете в нем стиль кодирования.

Компиляция закрытия не является запутывающим кодом: P

NiCk Newman 18.05.2015 08:15

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

Gustavo Rodrigues 18.05.2015 13:28

Не хорошая идея. Уменьшение / компиляция кода на стороне сервера может вызвать проблемы с безопасностью, если в минификаторе есть ошибка: zyan.scripts.mit.edu/blog/backdooring-js

mgol 24.08.2015 20:13

Указанная вами ошибка относится только к UglifyJS: она не относится к Closure Compiler.

Gustavo Rodrigues 29.08.2015 17:26

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

Fillipo Sniper 17.10.2018 03:35

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

Gustavo Rodrigues 18.10.2018 05:36

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