Добрый вечер.
Хочу поделиться с вами историей о попытке создания системы защиты скриптов (JS и CSS) от копирования. Началось все с того, что однажды я решил написать универсальную систему, которая бы позволила разработчикам web-приложений не беспокоиться за ноу-хау, воплощенные в JavaScript или CSS-коде. Систему я написал, просидев пару недель в новогодние праздники перед компьютером, но получилось она как назло, ни сколько не универсальной (после ее размещения начали приходить сообщения, что система не работает под первым апачем) и глючной (если злоумышленник использовал Оперу или сидел за кэширующей проксей – он мог достать защищенный скрипт).
Принцип работы был предельно прост. В файл .htaccess была помещена одна строчка, которая перенаправляла запросы к файлам с расширениями .css, .js и .jpg к скрипту, который, собственно и определял, откуда пришел запрос на файл. Если переменная $_SERVER['HTTP_REFERER'] содержала имя хоста, где находится защищаемый сайт, то скрипт считал, что запрос пришел от браузера, и в зависимости от типа файла генерировал нужный заголовок и передавал контент файла вопрошающему. Но, если вдруг $_SERVER['HTTP_REFERER'] указывала на чужой сайт или, не дай Бог, вообще была !isset(), это могло означать лишь одно – скрипт пытаются либо получить по прямой ссылке с другого ресурса, либо, просто введя прямую ссылку в адресную строку. В таком случае выдавалось сообщение о доступе к защищенному файлу, а в случае с картинкой, подсовывалась заранее подготовленная, с тем же предупреждением, на случай, если кто-то разместит защищенное изображение по прямой ссылке на другом сайте.
Все было хорошо, пока не обнаружилось, что скрипты и стили можно вытащить из кэша браузера, дав им загрузиться при легальном посещении сайта, а затем по прямой ссылке получить код из кэша. В связи с этим я начал думать над альтернативными способами подзагрузки JS-скриптов и стилей к странице, и решение оказалось прямо под носом. Не знаю, как остальные, но фреймворк JQuery позволяет импортировать скрипты, минуя "<script src=…></script>", что избавит скрипт от попадания в кэш, а значит, используя систему распознавания по $_SERVER['HTTP_REFERER'], мы сможем защитить скрипт от копирования. Кстати, если $_SERVER['HTTP_REFERER'] покажет, что скрипт запрашивается браузером, можно применить какой-нибудь пакер, чтобы облегчить пользователям сайта жизнь и трафик (только надо быть осторожным с уже запакованными скриптами, могут возникнуть непредвиденные ошибки, как например, с анимационным фреймворком jTweener, который никак не хочет проходить через пакер второй раз). Кстати, можно избавиться от jQuery и воспользоваться встроенным в современные браузеры методом XMLHttpRequest, или вызвать через AсtiveXObject соответствующий метод для старых браузеров, что позволит сэкономить немного трафика на jQuery, но не позволит сделать следующее…
Все, кто когда-либо пользовался фреймворком jQuery знают, что доступ к HTML элементам на странице осуществляется посредством селекторов, которые практически идентичны оным в CSS-файлах, и имеется метод $().css, при помощи которого можно задавать нужному элементу стиль. Так вот, чтобы избавиться от привычного метода загрузки стилей через «<link …», можно написать простенький парсер, который будет загружать в синхронном режиме файл со стилями, и затем потрошить его и сопоставлять объектам на странице соответствующий стиль. Но это, конечно, сродни извращению, ибо метод имеет много минусов, один из которых, кстати, результат паранойи – невозможность кэширования. Файл со стилем будет загружаться каждое посещение страниц сайта. То же самое будет и с JS-скриптами, но здесь есть одно НО: подобную систему можно использовать, если скрипты содержат уникальные алгоритмы, и имеют небольшой объем, но для ширпотреба, который тоннами разбросан по девелоперским сайтам, такой чести можно и не оказывать.
Здесь были приведены лишь некоторые принципы системы защиты скриптов, если кому-то будет интересно, на их основе он сможет попробовать написать собственную систему. Ясно одно – такая система может и должна быть создана.
|
Уважаемые посетители, сайт частично находится на реконструкции.
Блог 28
На сегодняшний день ситуация вокруг киноцентра «Рекорд» окончательно прояснилась, и мне, как бывшему директору ГП НО «Облкиновидеообъединение», хотелось бы дать свою оценку произошедшему и вместе с вами подумать как жить дальше.
В первую очередь я хочу поблагодарить всех вас за ту огромную поддержку, что вы оказали мне и всему коллективу предприятия. Я абсолютно уверен, что то, как сейчас развивается ситуация с трудоустройством сотрудников, это во многом ваша заслуга, результат того, что процесс ликвидации ГП НО «Облкиновидеообъединение» стал гласным и открытым.
1 ноября 2011 г. 10 июня 2011 г.Грязный черный пиар, направленный на хостера TimeWeb 31 марта 2011 г.Красное пятно у камеры Wave GT-8500 4 января 2011 г.Плюсы и минусы новой прошивки S8500XEJL2 для Samsung Wave GT-S8500 23 ноября 2010 г.Требуются web-разработчики 16 ноября 2010 г.Неработоспособность пакета Samsung Kies под Windows 7
все записи →
Про фотографию 21
На днях на глаза случайно попалась инструкция «Supporting the camera: holding with your hands», что в вольном переводе означает «Как правильно держать камеру». Все разобранные примеры имели иллюстрации. Большинство примеров, описанных в статье, соответствовали действительности, но внимание приковал случай расположения камеры в вертикальном положении для съемки портретов. Автор статьи называл положение рук «левая поддерживает объектив, правая управляет камерой и нажимает спуск» «самой распространенной ошибкой». При этом «правильным вариантом» называлось положение рук «правая рука поддерживает камеру за ручку, большой палец на кнопке спуск, левая рука свободно управляет кольцами объектива».
19 декабря 2010 г. 5 сентября 2010 г.Фото с Душой 9 августа 2010 г.Итоги международного фотосалона «Berega 2010» 10 июля 2009 г.5-й съезд Союза фотохудожников России
все записи →
Про кино 3
Морена Баккарин (Morena Baccarin) является бразильской и американской актрисой, наиболее известной своими ролями в американских научно-фантастических сериалах. Она сыграла Инару Серру, «компаньонку» (особу, сопровождающую высокопоставленных персон на публичных мероприятиях, ну, и оказывающую кое-какие другие услуги), путешествующую на корабле вместе с главными героями, в научно-фантастическом телесериале «Светлячок». А также Адрию, антагонистку, наполовину человека, наполовину «богиню», из другой галактики в сериале «Звездные врата SG-1».
7 августа 2010 г. 6 февраля 2008 г.Рататуй. Настоящая история 26 ноября 2007 г."Двенадцать" Никиты Михалкова
все заметки →
Поток сознания — twitter.com/shtorkin
Facebook — facebook.com/shtorkin
ВКонтакте — vk.com/shtorkin
Шторкин по Яндексу — «Нашлось 124 тыс. страниц»
Шторкин по Вараксину — «Шторкин сгонял за водкой, нарезал хлеб и открыл банку консервов»
К Пелевину никакого отношения не имею, и не читаю подобное... Псевдоним «Шторкин» возник за долго до выхода книги с одноименным героем, мотив — шторки фотоаппарата (хотел сначала взять псевдоним Затворкин, но оказалось, что фотограф с таким псевдонимом уже существует)
И еще. Друзья, помните, Don't feed The Troll ;-) |