Статьи

Важность безопасности JavaScript на стороне клиента

Эта статья была предоставлена JScrambler . Спасибо за поддержку партнеров, которые делают возможным использование SitePoint.

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

Одна из причин этого заключается в том, что JavaScript так легко изучить и использовать. Другая причина связана с широкой доступностью простых в использовании библиотек с открытым исходным кодом, таких как jQuery , React.js , Backbone.js , Angular.js и Ember.js .

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

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

Безопасность JavaScript

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

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

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

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

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

Почему не работает шифрование. Неизбежный вопрос, который многие задают: «Почему я не могу просто зашифровать свой файл?» Это отличная мысль. В самом деле. Проблема в том, что это не совсем так. Вы можете зашифровать файлы, но тогда они не будут полезны для браузера. Вам нужно будет расшифровать их, чтобы сделать их читаемыми для браузера, и вы вернетесь к исходной точке.

JavaScript везде

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

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

Однако теперь существует множество платформ со стандартными API, таких как PhoneGap, Cordova, Node Webkit и т. Д., Которые позволяют JavaScript взаимодействовать с собственными системными API. Они предлагают большую гибкость и мощь разработчикам приложений JavaScript.

Например, вы можете кодировать программное обеспечение для настольных компьютеров HTML5 и JavaScript, которое может считывать и записывать файлы на жесткий диск, или иным образом использовать функциональные возможности вашей системы, такие как предоставление доступа к вашей камере, информации о телефоне, Wi-Fi, Bluetooth, GPS и т. Д. ,

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

Какова роль обфускации JavaScript?

Когда речь заходит о безопасности JavaScript на стороне клиента, разработчики ничего не могут сделать, чтобы обеспечить 100% защиту. Однако с учетом вышесказанного, вот где в игру вступает обфускация JavaScript.

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

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

Выбор правильного JavaScript-обфускатора и не только

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

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

В статье « Почему бесплатный обфускатор не всегда бесплатен» Питер Грамантик описывает свой опыт работы с «бесплатным» обфускатором JavaScript. Он описывает, как код был запутан, но программа также вставила свой собственный вредоносный код в смесь.

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

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

Дополнительные функции и устойчивость. Другие вещи, на которые стоит обратить внимание, — это дополнительные функции и устойчивость защиты, которая может быть предложена выбранной вами программой. Некоторые услуги поставляются в профессиональном, интегрированном пакете, а некоторые даже предлагают некоторые дополнительные функции, которые выходят за рамки запутывания! Эти функции позволяют убедиться, что защита, которую вы применяете, не может быть легко изменена в течение нескольких минут, и может даже помочь вам обеспечить принудительное лицензирование ваших приложений. Например, компания JavaScript Protection, JScrambler предлагает:

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

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

Если у вас есть чувствительный код JavaScript на стороне клиента, и если вы хотите, чтобы этот код не был подделан, стоит инвестировать в лучшую защиту JavaScript, чтобы обеспечить необходимый дополнительный уровень безопасности. Если вы хотите ознакомиться с некоторыми предложениями JScrambler, посетите сайт www.jscrambler.com, чтобы подписаться на бесплатную пробную версию!