Ради спортивного интереса озадачился проблемой защиты от воровства JavaScript и CSS. Не редко люди (веб-мастера), увидев какую-либо фишку на том или ином сайте, лезут в сорсы посмотреть, как это сделано. В большинстве случаев код JavaScript и CSS хранится во внешних файлов, которые подгружаются браузером по ссылкам, и легко по ним доступны (достаточно залезть в исходник HTML, и сделать копи-паст, скажем, ссылки на CSS в адресную строку, подставив имя домена, если путь относительный). После недолгих раздумий, в голову пришла простейшая защита от этого воровства:
Этот код необходимо поместить в начало внешнего файла, требующего защиты:
<?php
if(!isset($_SERVER["HTTP_REFERER"]))
{
echo("не дам! :-)");
exit();
}
?>
А этот — в файл .htaccess:
AddType application/x-httpd-php .js .css
Принцип действия предельно прост. Фрагмент PHP-кода анализирует состояние переменной окружения HTTP_REFERER, которая указывает на источник, с которого поступил запрос на файл. Если файл запрашивается браузером, то она примет значение URL страницы, с которой поступил запрос (на CSS или JavaScript — разницы нет), а если исходный код пытается получить человек, вставив адрес файла в адресную строку, то она не будет определена. Тут-то мы и ловим воришку, подсовывая ему вместо вожделенного кода все что захотим. Варианты: как здесь — сообщение, но это слишком просто, да и вызовет у настойчивого нарушителя непреодолимое желание получить код. Вариант второй: подсунуть ему нечто, напоминающее внешне истинный код, но предварительно внеся в него изменения, которые, например, скроют уникальные фичи или приемы CSS, человек долго будет ломать голову, как же это у вас работает, и вряд ли догадается что просматривает липовый код.
Второй фрагмент кода нужен для того, чтобы в файлах с расширениями .css и .js правильно интерпретировались PHP-тэги.
Описанная защита является именно защитой от копирования, а не защитой от использования, коими являются всяческие пакеры, кодировщики и обфускаторы, делающие скрипт нечитабельным, но, тем не менее, не защищающие его от копирования, а при условии, что человек проанализировал места использования функций из скрипта, не защищающие также и от его использования. Эту идею при жделании можно развить, например можно явно указать, какой домен для скрипта или CSS-файла является "родным" и т.д.
| | | | На самом деле существует масса способов получить любой контент, полученный с сайта, главное знать как. Описанная система является лишь защитой от дурака, но учитывая их количество в Сети, она будет весьма эффективной. Счастливого Рождества ;-) | | | | |

Комментарии:
06.01.2009 в 20:46 Семен Шторкин
Забыл напомнить, что в конце PHP-кода необходимо поместить указание заголовка, чтобы браузер понял, что передается ему именно text/css, а не что-то еще... Код: header("Content-type: text/css; charset: windows-1251");
08.01.2009 в 3:01 Семен Шторкин
Безумная идея переросла во что-то большее: http://shtorkin.ru/csrp Теперь в начало защищаемых файлов никакой код не помещается, а страшные бинды расширений .js и .css с PHP не производятся.
|
Уважаемые посетители, сайт частично находится на реконструкции.
Блог 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 ;-) |