Добрый вечер.
Хочу поделиться с вами историей о попытке создания системы защиты скриптов (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-скриптами, но здесь есть одно НО: подобную систему можно использовать, если скрипты содержат уникальные алгоритмы, и имеют небольшой объем, но для ширпотреба, который тоннами разбросан по девелоперским сайтам, такой чести можно и не оказывать.
Здесь были приведены лишь некоторые принципы системы защиты скриптов, если кому-то будет интересно, на их основе он сможет попробовать написать собственную систему. Ясно одно – такая система может и должна быть создана.
|
Уважаемые посетители, сайт частично находится на реконструкции.
Блог 20
Не подумайте, что я воспеваю былой коммунистический лозунг, но смущает, что последнее время, продиктованное ростом безработицы, неумолимо растет и количество неблагополучных семей. Дети там «воспитываются» в условиях непрекращающегося пьяного дебоша, 40-летние безработные детины отбирают у престарелых матерей пенсию «на пропой», а вчерашние младшие научные сотрудники НИИ копаются в мусорных баках и выдирают из железнодорожных путей костыли для сдачи на металлолом. Подавляющее большинство этих людей объединяет одно — хронический алкоголизм. Ради денег на очередную бутылку- люди готовы рыться в мусоре, попрошайничать, воровать, грабить и совершать другие преступные деяния.
7 августа 2010 г. 4 августа 2010 г.Водители-садисты ИП Хитрова 31 июля 2010 г.Жара, «Водоканал» и урожай 30 июля 2010 г.Гламурные подонки 28 августа 2009 г.Тихий ужас. Артисты ТЮЗа объявили бессрочную голодовку 8 августа 2009 г.Российские спецслужбы заказали хакерскую атаку на FaceBook?
все записи →
Про фотографию 20 (+1)
Ло не любила цифру. После того, как ей подарили пленочный Никон, она сделала все, чтобы ей подарили фотоувеличитель, глянцеватель и всевозможные ванночки, баночки и скляночки. «Добродетель наказуема», — подумал неизвестный нам добродетель и, поцеловав Ло в лоб, скрылся из ее комнаты, обращенной в фотолабораторию. Чтобы не отвлекать от работы операторов минилабов своими этюдами, Ло весь процесс светописи сосредоточила в уютной спальной, чему была безмерно рада — выходить на улицу лишний раз не было никакого резона.
5 сентября 2010 г. 9 августа 2010 г.Итоги международного фотосалона «Berega 2010» 10 июля 2009 г.5-й съезд Союза фотохудожников России 9 июля 2009 г.Пополнения в фото-галерее
все записи →
Про кино 3
Морена Баккарин (Morena Baccarin) является бразильской и американской актрисой, наиболее известной своими ролями в американских научно-фантастических сериалах. Она сыграла Инару Серру, «компаньонку» (особу, сопровождающую высокопоставленных персон на публичных мероприятиях, ну, и оказывающую кое-какие другие услуги), путешествующую на корабле вместе с главными героями, в научно-фантастическом телесериале «Светлячок». А также Адрию, антагонистку, наполовину человека, наполовину «богиню», из другой галактики в сериале «Звездные врата SG-1».
7 августа 2010 г. 6 февраля 2008 г.Рататуй. Настоящая история 26 ноября 2007 г."Двенадцать" Никиты Михалкова
все заметки →
Если ты фотограф бойкий — приходи на «Фото Горький»!
На «Фото Горьком» значительно облагородился раздел «Свадебная фотография в Нижнем Новгороде».
И еще! Помните, друзья, Don't feed The Troll! |