Обфускация и динамическое получение скриптов
Говоря о скриптах на клиентской части WEB-приложения, нельзя не коснуться темы защиты авторских прав. Предположим, Вы разработали и реализовали некий алгоритм, имеющий научную ценность. Или Вам интересно было бы скрыть от клиента подробности реализации созданной Вами системы. Или просто нет желания давать кому угодно в Интернете возможность читать свои комментарии.
Скрипт, то есть последовательность строк текста программы, выполняется как есть, без предварительного процесса компиляции, прямо из текста и построчно. Иными словами, для выполнения скрипта на клиентской части мы должны передать клиенту весь текст выполняемой программы. К сожалению, избежать этого - нельзя. Но можно попытаться запутать клиента, значительно усложнить возможность понимания сути работы программы. Для этой цели существуют специальные программные средства - обфускаторы (obfuscate - делать неочевидным, запутанным, сбивать с толку). Обфускаторы:
убирают комментарии из исходного текста программы
убирают "лишние" с точки зрения интерпретатора символы форматирования (пробелы, табуляции, пустые строки).
заменяют имена переменных.
попутное свойство обфускаторов: передаваемый на клиента код программы уменьшается в размере.
Пример исходной программы:
int COUNT = 100;
float TAX_RATE = 0.2;
for (int i=0; i<COUNT; i++)
{
tax[i] = orig_price[i] * TAX_RATE;
price[i] = orig_price[i] + tax[i];
}
Текст той же самой программы после работы обфускатора:
for(int a=0;a<100;a++){b[a]=c[a]*0.2;d[a]=c[a]+b[a];}
Ту же самую цель, то есть сделать суть менее очевидной, преследует и другой подход к передаче скриптов на клиентскую часть. А именно: скрипт не существует в виде некоего файла на сервере и не включается непосредственно в текст передаваемой страницы. Вместо этого, скрипт создается динамически (обычно - через обфускатор) и запрашивается с клиента тоже динамически. Выше был приведен пример ассинхронной загрузки и выполнения скрипта через JQuery/AJAX. А вот еще один пример динамической загрузки: в документации фейсбука предлагается динамически создать на странице элемент "скрипт" и ассинхронно загрузить текст библиотек для работы с сервисом фейсбук:
// Load the SDK asynchronously
(function(d){
var js,
id = 'facebook-jssdk',
ref = d.getElementsByTagName('script')[0];
if (d.getElementById(id)) {return;}
js = d.createElement('script'); js.id = id; js.async = true;
js.src = "//connect.facebook.net/en_US/all.js";
ref.parentNode.insertBefore(js, ref);
}(document));
В данном примере текст реализованных на JavaScript функций all.js существует на сервере connect.facebook.net статически, постоянно. Но, вообще говоря, текст передаваемого на клиента скрипта может создаваться динамически, с учетом прав подключившегося клиента. И содержать только те функции, которые могут быть выполнены - данным конкретным авторизовавшимся пользователем. Большая часть существующих на сегодняшний день средств WEB-программирования (framework'ов) предоставляет разработчикам такие возможности.
- Оглавление
- Введение.
- Предмет рассмотрения данного курса.
- Одно-, двух- и многоуровневые приложения.
- Интернет.
- Адрес в интернете
- 2001:0Db8:11a3:09d7:1f34:8a2e:07a0:765d
- Имя в интернете
- Службы (сервисы)
- Сокета.
- Что такое "сокета" (socket) ?
- Создание серверной сокеты (пример на языке c).
- Сериализация
- Основы верстки: таблицы
- Основы верстки: фреймы
- Основы верстки: позиционирование участков сайта
- Протокол http
- Структура запроса (Request).
- Структура ответа (Response).
- Перспективы развития http.
- Интернет-приложения
- Web-приложения
- Web-сервисы
- Особенности проектирования
- Особенности пользовательского интерфейса
- Программирование интернет-приложений
- Объектно-ориентированное программирование
- Классы и объекты
- Жизненный цикл класса
- Статические члены класса
- Инкапсуляция
- Наследование
- Полиморфизм
- Интерфейсы
- Событийно-ориентированное программирование
- Совместная работа над проектом
- Технологии создания web-клиентов
- Dom (Document Object Model)
- Каскадные таблицы стилей
- JavaScript
- Обфускация и динамическое получение скриптов
- Java Applets
- ActiveX/npapi
- Adobe Flash
- Web-серверы
- Nginx (engine X)
- Технологии, применяемые на стороне сервера
- ИнтерфейсCgi
- КонцепцияMvc
- Сервлеты
- JavaScript
- Хранение данных