New! Telegram канал про микроконтроллеры, SDR приемники, радиолюбительство и электронику в целом:

t.me/HighFrequency

На правах рекламы:

Защита JavaScript и CSS от копирования. Оглядываясь назад 18 июня 2009 г.

Добрый вечер.

Хочу поделиться с вами историей о попытке создания системы защиты скриптов (JS и CSS) от копирования. Началось все с того, что однажды я решил написать универсальную систему, которая бы позволила разработчикам web-приложений не беспокоиться за ноу-хау, воплощенные в JavaScript или CSS-коде. Систему я написал, просидев пару недель в новогодние праздники перед компьютером, но получилось она как назло, ни сколько не универсальной (после ее размещения начали приходить сообщения, что система не работает под первым апачем) и глючной (если злоумышленник использовал Оперу или сидел за кэширующей проксей – он мог достать защищенный скрипт).

Принцип работы был предельно прост. В файл .htaccess была помещена одна строчка, которая перенаправляла запросы к файлам с расширениями .css, .js и .jpg к скрипту, который, собственно и определял, откуда пришел запрос на файл. Если переменная $_SERVER['HTTP_REFERER'] содержала имя хоста, где находится защищаемый сайт, то скрипт считал, что запрос пришел от браузера, и в зависимости от типа файла генерировал нужный заголовок и передавал контент файла вопрошающему. Но, если вдруг  $_SERVER['HTTP_REFERER'] указывала на чужой сайт или, не дай Бог, вообще была !isset(), это могло означать лишь одно – скрипт пытаются либо получить по прямой ссылке с другого ресурса, либо, просто введя прямую ссылку в адресную строку. В таком случае выдавалось сообщение о доступе к защищенному файлу, а в случае с картинкой, подсовывалась заранее подготовленная, с тем же предупреждением, на случай, если кто-то разместит защищенное изображение по прямой ссылке на другом сайте.

Все было хорошо, пока не обнаружилось, что скрипты и стили можно вытащить из кэша браузера, дав им загрузиться при легальном посещении сайта, а затем по прямой ссылке получить код из кэша. В связи с этим я начал думать над альтернативными способами подзагрузки JS-скриптов и стилей к странице, и решение оказалось прямо под носом. Не знаю, как остальные, но фреймворк JQuery позволяет импортировать скрипты, минуя " ", что избавит скрипт от попадания в кэш, а значит, используя систему распознавания по $_SERVER['HTTP_REFERER'], мы сможем защитить скрипт от копирования. Кстати, если $_SERVER['HTTP_REFERER'] покажет, что скрипт запрашивается браузером, можно применить какой-нибудь пакер, чтобы облегчить пользователям сайта жизнь и трафик (только надо быть осторожным с уже запакованными скриптами, могут возникнуть непредвиденные ошибки, как например, с анимационным фреймворком jTweener, который никак не хочет проходить через пакер второй раз).  Кстати, можно избавиться от jQuery и воспользоваться встроенным в современные браузеры методом XMLHttpRequest, или вызвать через AсtiveXObject соответствующий метод для старых браузеров, что позволит сэкономить немного трафика на jQuery, но не позволит сделать следующее…

Все, кто когда-либо пользовался фреймворком jQuery знают, что доступ к HTML элементам на странице осуществляется посредством селекторов, которые практически идентичны оным в CSS-файлах, и имеется метод $().css, при помощи которого можно задавать нужному элементу стиль. Так вот, чтобы избавиться от привычного метода загрузки стилей через «
Здесь были приведены лишь некоторые принципы системы защиты скриптов, если кому-то будет интересно, на их основе он сможет попробовать написать собственную систему. Ясно одно – такая система может и должна быть создана.


comments powered by Disqus

 

Про радио 6

 

Про микроконтроллеры 1

 

Про фото 27

 

Блог 35

 

Про кино 8

 

Про WEB 6

 

 

New! Telegram канал про микроконтроллеры, SDR приемники и радиолюбительство в целом:

t.me/HighFrequency

 

Поток сознания тут — twitter.com/shtorkin

И тут — facebook.com/shtorkin

Сюда можно писать в ЛС — vk.com/shtorkin

Youtube — youtube.com/user/SemenShtorkin

Картинки — instagram.com/shtorkin


  © 2007 – 2018 Семен Шторкин (Семен Орлов)
Для связи:

Все права на представленные на сайте материалы принадлежат Семену Орлову, если не указано иного. При копировании материалов активная индексируемая ссылка на сайт «shtork.in» обязательна.