Nickolay.info. Тексты. Вор.Нет

Небольшой обзор неправильных и правильных методов защиты контента, спровоцированный Интернет-ворами

Несомненно, нашу цивилизацию погубит "интеллектуальная собственность".

Желание защитить авторские права в применении к сайту (и не только сайту) обычно связано с одним из трех мотивов:

Только последний мотив заслуживает рассмотрения, и существует только один способ его реализации - написание защищенных Web-приложений, работающих через защищенные же протоколы, такие как SSL. Однако даже в этом случае браузер вынужден сгенерировать "конечный код", легко доступный через объектную модель документа DOM.

Несмотря на правильное понимание всех этих вопросов, бывает обидно увидеть свой, казалось бы, вполне невинный и нераскрученный сайтик грубо сворованным, да еще и с "моим" субдоменом pers. Речь о странице pers.upyachka.org (здесь специально ссылки на вора нет, а строка с адресом не индексируется), которая случайно попалась мне на глаза еще в конце апреля этого года.

Домен upyachka.org (не путать с "известным" сайтом для отморозков www.upyachka.ru), по данным службы имен www.nic.ru, принадлежит следующей организации:

Registrant Name:OOO McHost.Ru 
Registrant Organization:McHost Ltd 
Registrant Street1:Usievicha str. 12/14 
Registrant City:Moscow 
Registrant State/Province:Moskovskaya oblast 
Registrant Postal Code:125284 
Registrant Country:RU 
Registrant Phone:+495.7082592 
Registrant Email:domains@mchost.ru 

Возмущает здесь не столько сам факт кражи, сколько совершенно свинское и неквалифицрованное ее исполнение (явно примитивным автоматическим ботом), а также полное молчание владельца старшего по отношению к воровскому домена upyachka.org в ответ на мои письма. Видимо, адрес владельцы домена указали "спамерский". Вот такие нехорошие люди работают в компании McHost.Ru, никогда не пользуйтесь ее услугами.

Ну а мы в этой статье посмотрим, возможно ли все-таки "защитить сайт" в принципе, по крайней мере, запретить конечному пользователю "воровать" исходные элементы HTML-страницы.

Для умного читателя ответ можно уместить в одной фразе: единственный способ защитить свой HTML-код - записать его на диск и положить этот диск в запертый сейф, ни в коем случае не доставая его наружу. В конечном счете, парадоксальна сама мысль о защите HTML-кода. Ведь Интернет и формат HTML в принципе разрабатывались как открытые стандарты. Это означает, в частности, что любой пользователь, загрузивший страницу в браузер и способный найти в меню команду вроде Вид.Источник (Internet Explorer 7) сможет увидеть исходный HTML-текст. Наконец, сколь бы трудоемкой и сложной ни была Ваша защита, на клавиатуре есть клавиша Print Screen и существуют программы распознавания образов и текста, такие как FineReader. Ну или еще проще - если информация представляет хоть какую-то ценность (что неверно по отношению к 99,99% страниц, которые Вы видели) всегда можно нанять специально обученных пионеров, которые займутся перепечаткой с экрана :) Поэтому не воруют только то, что никому не нужно, а если воруют - нужно радоваться... информация - вообще единственная вещь, которой становится больше, если ей делиться.

Технические аспекты невозможности полноценной защиты HTML-кода также очевидны:

Кое-что, конечно, сделать можно, но задача квалифицированной защиты сайта в целом не проще, а труднее, чем собственно задача его разработки. Кроме того, защита как создаст массу лишних сложностей "честным пользователям" - начиная с резко возросшего траффика и заканчивая необходимостью вводить пароли или коды, да еще заботиться, включены ли JavaScript или cookies - так и привлечет хакеров, которым интересно именно то, что закрыто.

Но это слишком общие слова. Давайте кратко рассмотрим (а заодно классифицируем и отвергнем) основные имеющиеся на сегодня способы.

1. Правовая или юридическая защита, основанная на существующих законах об охране авторских прав и интеллектуальной собственности. Думаю, долго говорить о такой "защите" не стоит, т.к. особенности нашего правосудия всем известны. Проще судить директора школы, который не имеет понятия, каким местом "пиратская" программа отличается от "легальной" (чаще всего, кстати, никаким, кроме того, что Вы не платите неадекватно жадным буржуям), чем доказать хоть одну из массовых краж содержимого Web-страниц, на которых основано 99% "контента" в Рунете. Кроме того, объектами такой защиты не могут быть дизайн сайта или его идея. То и другое по закону не является объектом авторского права. Однако, если Вы готовы заплатить квалифицированному юристу или получаете со своего произведения приличную прибыль, этот метод не так уж плох. Имеет смысл посетить по теме ресурсы www.copyright.ru и www.textlock.ru. Последний, кстати, пытается проверять контент на плагиат и даже содержит базу свидетельств с номерами на публикацию, куда можно добавить ваши уникальные статьи.

Тем не менее, некоторые лица, особенно ревностно относящиеся к своему copyright, придерживаются при подготовке материалов для Интернет следующих юридических принципов:

Наконец, обычно достаточно написать вору по E-mail о том, что Вы знаете и используете эти способы, чтобы сворованные материалы были убраны. Основной недостаток метода очевиден - надо быть почти параноиком или очень хорошо зарабатывать на сайте, чтоб аккуратно всем этим заниматься :)

2. Системный или серверный метод основан на настройках прав доступа к сайту, написании серверных скриптов и специальных ISAPI-приложений, работающих на стороне сервера. Реализация такой защиты может быть связана с работой по защищенному протоколу SSL, созданием авторизованных сессий в браузере через PHP или через клиентский Java-апплет, возможна также организация виртуальных IP-сетей через Интернет. Несмотря на то, что эти решения достаточно известны и используются во многих банковских и корпоративных сетях или интернет-магазинах, нужно очень хорошо разбираться в программировании, чтоб от всего этого была польза. Или быть готовым потратиться на найм специалиста. Для частного или небольшого корпоративного сайта способ не имеет никакого смысла. К этой же группе методов можно отнести всякие хитрости в настройке сервера, например, обработку интерпретатором PHP файлов с каким-нибудь "невинным" клиентским расширением вроде JS или CSS. Как минимум, системный способ предполагает наличие у вас сервера и навыков его администрирования. При всем этом, вы не победите хакера, использующего разные хитрые proxy-сервера (в том числе клиентские) а лишь осложните ему жизнь.

Встречаются и другие подходы, такие как создание из кода обычного выполняемого файла (Perl2Exe)

3. Клиентская или локальная защита. Наименее серьезный и оттого наиболее распространенный способ. Выше уже подчеркивалось, что "тотально" защитить контент этим способом невозможно хотя бы из-за кэширования браузером всех посещенных Вами страниц а также возможности "ручного" копирования чего бы то ни было через экранные снимки. Тем не менее, существует масса способов такой "защиты".

Обфускация (см. Обфускатор). Метод основан на том, что легко доступный HTML-код страницы или скрипта преобразуется в нечто запутанное, намного менее читаемое человеком, но понятное браузеру. Например, выделенная жирным шрифтом размера 4 строка "Привет" может выглядеть в коде как

<font size=4><b>Привет</b></font>
а может и как
<font size=3><b><font size=+1>П</font></b><font size=+1><b>р</b></font></font><font size=4>
<b>ив</b></font><font size=3><b><font size=+1>е</font></b><b><font size=+1>т</font></b></font>

Не очень читабельно, не так ли? Правда, славный Microsoft Word генерирует подобный же по ужасности HTML-код без всякой обфускации... и слишком очевидны минусы - резкое увеличение объема файла (а значит и траффика) плюс малоэффективная, но требующего большого времени обработка кода. Существует немало обфускаторов javaScript, информацию о них легко получить в поисковиках.

Травля мыши и событий. На эту тему очень много информации, я сделаю только краткий обзор. Единственный плюс такой "защиты" - она практически ничего не стоит, минусов гораздо больше, хотя бы то, что сработает она только от очень "непродвинутого" пользователя, а грамотный спокойно найдет все в папке Temporary Internet Files. Кроме того, во многих альтернативных браузерах (Opera, Mozilla Firefox) часть приемов может и не работать.

Отключаем правую кнопку мышки:

<script language='Javascript'>
<!--
var message='Текст';
function click(e) {
 if (document.all) { //браузер IE и подобные
  if (event.button == 2) { //нажата правая кнопка
   alert(message); //выдать сообщение
   return false;
  }
 }
 if (document.layers) { //Netscape-подобные браузеры
  if (e.which == 3) {
   alert(message);return false;
  }
 }
}

if (document.layers) {
 document.captureEvents(Event.MOUSEDOWN);
}
document.onmousedown=click;
// --></script> 

Меню правой кнопки отключить проще всего так:

<body oncontextmenu="return false;">

Выделение на странице можно отключить так:

<body onselectstart="return false;">

Можно придумать массу других способов, например, с помощью метода window.setTimeout(), позволяющего выполнять код через заданный интервал времени, 10 раз в секунду вызывать процедуру, делающую что-то вроде

//запрещаем пользователю выделять фрагменты на странице
var range=document.body.createTextRange();
range.moveToPoint(0,0);
range.select(); 

(опять же, только для Internet Explorer).

Запрет кэширования. Для этого настраиваются параметры HTTP-заголовка с помощью мета-тегов, вставляемых обычно в тег <head>:

<meta http-equiv="Pragma" content="no-cache">
<meta http-equiv="Cache-Control" content="no-cache">

Увы, использование нестандартного браузера, который плевать хотел на мета-теги, легко снимает эту "защиту". Кроме того, если URL-адрес страницы известен, на Delphi, Perl или Java за несколько минут пишется основанный на стандартном классе браузер. Proxy-сервер на клиентском компьютере также способен сохранять все проходящие через него страницы и скрипты.

JavaScript-шифрование кода. Пожалуй, самый популярный метод. В JavaScript есть метод document.writeln, позволяющий "на лету" (динамически) формировать содержимое Web-страницы, возможно, включающей любые теги и скрипты. В этом случае код страницы "зашифровывается" JavaScript-функцией в виде некоторой строки символов. Затем в код добавляется вызов и тело другой JavaScript-функции, расшифровывающей эту строку и передающей результат расшифровки методу document.writeln(). Простейшее применение такой защиты, например, дано в моей статейке о зашифровке адреса E-mail. Поскольку страница в этом случае уже содержит процедуру расшифровки, для взлома достаточно вставить тот же самый document.writeln(), распечатывающий расшифрованный аргумент. Разумеется, первый же вызов процедуры не обязан сразу предоставлять расшифрованный код страницы. Встречаются системы, содержащие несколько последовательно выполняемых скриптов, каждый из которых расшифровывает лишь дешифратор следующего уровня... Суть дела в том, что интерпретация и декодирование данных, какими бы многоступенчатыми они ни были, рано или поздно отобразят страницу в конечном виде, который хранится в памяти браузера и может быть легко отображен:

javascript:window.alert(document.getElementsByTagName('html')[0].innerHTML);

Эта "волшебная строчка", если ее вставить в адресную строку браузера и выолнить, покажет в окне сообщения содержимое страницы, заключенное между тегами <HTML> и </HTML>. Именно то содержимое, которое содержит результат интерпретации всех скриптов, а не то, что Вы видите по команде Вид.Источник. Метод window.alert() покажет не так уж много текста, думаю, не проблема сделать форму с полем <textarea>, куда будет выводиться расшифрованный таким образом код.

Особенно умиляют платные буржуйские творения, такие как Advanced HTML Protector (сайт www.protect-html.com, цена продукта $50!) или не менее известный HTML Guardian. Бывает, с ними обойтись даже еще проще, чем писать какую-то форму... Вот зашифрованный одним из популярных способов "страшный и ужасный код":

<body>
<script> 
enc = "%3Chtml%3E%u041F%u0440%u0435%u0432%u0435%u0434%3C/html%3E"; 
dec = unescape(enc); 
document.write(dec); 
</script>
</body>

Это чудо отобразит на экране строку "Превед". Все, что мне понадобилось для "взлома" - вписать в тег <body> один вызов:

<body onunload="alert(document.body.innerHTML)">

Теперь по закрытию окна расшированный код благополучно будет показан. Имеет смысл поинтересоваться также методами outerHTML, innerText, outerText.

JavaScript-проверки домена или адреса. Еще один способ "защиты от дурака" - скриптом проверять, с того ли хоста, что нужно, загружена страница, если хост "неправильный" - выдавать сообщение или просто пытаться закрыть окно методом window.close(). Вот пример маленькой ссылочки для моего сайта:

<a href="javascript:location.href" onClick="if(top.location.host!='nickolay.info') 
 document.write ('Украдено с сайта nickolay.info');">©</a>

JavaScript-окна. С помощью метода window.open() можно задавать различные параметры всплывающих окон, отключая в них меню или панели инструментов. Правую кнопку при этом также можно отключить. Можно дополнительно ввести в заголовок защищаемой страницы скрипт, определяющий имя окна window.name, в которое пользователь хочет загрузить страницу. Например, это имя MyWin:

if(window.name!=null) {isOK2=window.name;} 
else {isOK2='nameFalse';}

Если имя окна не MyWin, то направляем пользователя на ложную страницу или на страницу с предупреждением, или на исходную. Можно просто программно закрыть окно.

if (isOK2!='MyWin') { 
 window.location.replace('mistake.htm'); // загружаем в окно другую страницу
 // window.close(); // или закрываем окно
}

Таким образом мы боремся с любыми попытками ламера открыть страницу в новом окне. Ссылки с поисковиков при этом также будут попадать на страницу с ошибкой, так что решайте, нужна ли Вам такая защита.

Тайминг и антиотладочные меры. Следует понимать ,что если хакеру понадобиться ломать наши несравненные JavaScript-защиты, он будет делать это на своей, клиентской стороне, полностью ему подеонтрольной. Это значит, что он может пользоваться как отладчиком JavaScript, так и собственной JavaScript-машиной. Мы можем попытаться контролировать время выполнения скрипта для противодействия отладчику, периодически измеряя средствами JavaScript, как долго уже выполняется тот или иной код. Однако, собственный метод Date() в JavaScript-машине взломщика позволит ему разобраться и с этим.

Flash. Если код html вставлен во flash, достать его обратно представляет временную проблему. Однако, уже появились средства, позволяющие извлечь отдельные компоненты flash-ролика, включая HTML-код и опорные кадры, и сохранять все это на диск (HTTP Weazel, Sothink SWF Decompiler). Так же благополучно весь flash-код не будет проиндексирован поисковиками.

Слоеные и резаные картинки. Еще один популярный подход к защите графики. Первая идея состоит в том, что сама картинка размещается фоном в ячейке таблицы, а поверх нее накладывается прозрачный GIF размером 1*1 пиксел, растянутый на всю ячейку, который пользователь и сохранит при отдельном сохранении картинки. Второй способ (весьма трудоемкий) - картинка разрезается на множество сегментов, каждый из которых затем вставляется в свою ячейку таблицы. По меньшей мере, воришке придется сохранять каждый сегмент в отдельный файл, а затем "склеивать" фрагменты в графическом редакторе. Автоматизировать "нарезку" поможет программа Ulead PhotoImpact.

4. SEO-Способы. Эти способы наиболее перспективны - ведь они исходят из того, что предотвратить воровство содержимого невозможно или слишком трудоемко. Значит, надо сделать так, чтобы Ваша исходная информация находилась лучше, чем сворованная.

Вопреки совету делать сайт всегда с относительными URL, имеет смысл в своих "вороёмких" статьях ставить абсолютные ссылки на другие свои публикации. Логика проста - парсеры, как правило, не удаляют ссылки из текста (кроме Ваших верха и низа страницы, которые вор может убрать), так что цитируемость вашего сайта (а значит, и видимость в поисковиках) от воровства будет только повышаться. Со старых статей можно также иногда ссылаться на новые, внося в них изменения и "провоцируя" переиндексирование поисковой машиной.

Имеет смысл завести один или несколько блогов на популярных сервисах, куда Вы будете вставлять анонсы новых статей со ссылками на них. Кроме всего прочего, многие блог-сервисы работают и с RSS, так что Ваши анонсы попадут в ленты новостей.

Если не лениться, можно постить новости со ссылками на статьи в социальные сервисы анонсов (smi2.ru, news2.ru, reddit.com, digg.com, propeller.com). Важо только не оффтопить и не прослыть за спамера. Анонсы должны быть, по возможности, "в тему".

Еще недавно популярные сервисы закладок (bobrdobr.ru, memori.ru, rumarkz.ru, del.icio.us, google.com/bookmarks) позволяют разместить "лишние" ссылки, которые никогда не будут лишними и способствуют тому, что поисковик первым узнает о Вашей статье, а не о воровском клоне.

Ценные картинки, как упоминалось, имеет смысл размещать с абсолютными URL. Плагиатор почти наверняка оставит ссылки как есть. В случае обнаружения воровства легко добываемой или написанной программкой заменить в коде имена всех картинок, скопировать правильные картинки под новыми именами, а в старые вставить видимую надпись "украдено с сайта такого-то". И вору репутацию попортите, и себе рекламу создадите. Можно придумать и немало подобных же способов для текста.

Ну и, наконец, самый простой совет - развивайте свой сайт, не останавливайтесь на достигнутом, и воры просто не успеют за вами. А уж если размещаете материалы, не следуйте примеру компании McHost.Ru, приютившей у себя ворье, тырящее целыми субдоменами ради двух строчек идиотской контекстной рекламы.

Продолжение темы

Рейтинг@Mail.ru
вверх гостевая; E-mail