«Когда мы обращаемся к стрельбе из лука и другим видам искусства, распространенным в Японии и по всему Дальнему Востоку, прежде всего бросается в глаза то, что занимающиеся ими не преследуют утилитарных целей и не ставят превыше всего эстетическое наслаждение. Подлинное предназначение этих видов искусства в том, чтобы развивать ум человека, а значит, дать человеку возможность соприкоснуться с первичной реальностью.»

Т. Д. Судзуки

Шторкин.руМоя работа → Технодром

Технодром!Защита кода внешних скриптов JavaScript и стилей CSS от копирования  (6 января 2009 г. )

Ради спортивного интереса озадачился проблемой защиты от воровства 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 не производятся.
Уважаемые посетители, сайт частично находится на реконструкции.

 

Блог 20

 

Про фотографию 20 (+1)

 

Про кино 3

 


Если ты фотограф бойкий — приходи на «Фото Горький»!

На «Фото Горьком» значительно облагородился раздел «Свадебная фотография в Нижнем Новгороде».

И еще!
Помните, друзья, Don't feed The Troll!



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

Все права на представленные на сайте материалы принадлежат их авторам. Копирование материалов допускается лишь с согласия автора.

Всякое распространение материалов данного сайта без согласия автора преследуется по закону.


Задворки