Как уберечься от воровства информации с вашей страницы в Интернете

В то время, когда большинство компьютерных изданий рапортует об увеличении числа сайтов, авторы многих из них вздрагивают - одни побаиваясь разоблачения, а другие оттого, что плоды их труда попросту могут украсть. Думаю, каждый из читателей хотя бы раз слышал или читал о том, как новоявленные дизайнеры без зазрения совести и невзирая на знаки копирайта крадут графику, элементы сайта или полностью его дизайн у популярных конкурентов. Время от времени подобные истории происходят не только с нашими малоизвестными сайтами, но и с довольно популярными международными порталами (кстати, в США кража дизайна сайта приравнивается к краже частной собственности). Ну что же, как говорится, "спасение утопающих - дело рук самих утопающих". Давайте попробуем в меру своих сил и умений хоть как-то защитить собственные сайты от дизайнеров "с большой дороги".

В вопросе защиты контента сайта от копирования существует несколько отличных друг от друга подходов. Простейшим из них является использование возможностей JavaScript для блокирования функций выделения и копирования как графических, так и текстовых элементов веб-страницы. Это не самый надежный, но самый доступный вариант для большинства веб-мастеров и серверов. Далее следует скриптовая защита, а вернее, показ страницы через специальный php- или cgi-шлюз, также не позволяющий производить копирование, сохранение и кэширование страниц. Однако, как правило, подобные скрипты строятся на функции создания страницы "на лету", а это не лучший вариант защиты. Ну и наиболее "надежным" принято считать перевод всех элементов страницы в шестнадцатеричный код ASCII, закодированный в ISO Latin-1. Слово "надежный" я специально взял в кавычки, и на то есть две причины. Во-первых, эта технология предполагает работу с веб-страницами в режиме кодирования-декодирования, что уже говорит о том, что пользователь, сохранив закодированную страницу, может создать скрипт, который декодирует первоначальный ASCII-код и сохранит его в читаемом виде где-нибудь на диске. Во-вторых, вряд ли можно считать надежными технологии с одинаковыми и неизменными принципами, доступными любому пользователю Сети. В большей мере все эти подходы служат лишь для защиты от начинающих пиратов и людей, мало знакомых с подобными технологиями. Конечно, есть еще SSL, но в связи с тем, что это платный сервис и не каждый готов на него потратиться, мы его рассматривать не будем.

Начнем с самого простого - с запрета на кэширование страницы. Хоть это может показаться бесполезным с точки зрения защиты, многие специалисты по безопасности считают это первым шагом на пути к полноценной защите сайта от копирования. Для запрета на кэширование необходимо всего-навсего сделать на это указание в разделе <head>...</head> :

<META HTTP-EQUIV="Pragma" CONTENT="nocache"> 

или: <META HTTP-EQUIP="nocache"> или:

<META HTTP-EQUIP=Cache-Control content=nocache>

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

<span oncontextmenu="return false";

ongradstart="return false";><img src="picture.jpg" galleryimg="no"></span>

В этом случае используются функции oncontextmenu и ondragstart, позаимствованные из JavaScript (оно и не мудрено, ведь JScript принят в Internet Explorer языком по умолчанию, что не требует обязательного указания атрибутов <script>). Скрипты от Java широко используються и для других функций защиты веб-страниц, а частности для блокировки некоторых функций. Так вы можете заблокировать функцию клика правой кнопкой мыши и сообщить пользователю об этих ограничениях специальным сообщением (рис. 1.). Чтобы реализовать эту функцию, вам необходимо внести в тело страницы (между тегами <body>...</body>); текст выпадающего сообщения вы, канечно, можете изменить на свой вкус;

<script language = "Javascript1.2">

<!--

varmymessage = "Извините, но вы не можете посмотреть код страницы, или сачать картинку.";

if (document.layers){

document.captureEvents(Event.MOUSEDOWN);

}

function rtclickcheck(keyp){

if (document.layers && keyp.which !=1){

alert(mymessage);

return false;

}

if (document.all && event.button !=1){

alert(mymessage);

return false;

}

}

document.onmousedown = rtclickcheck

//-->

</script>    

Но бывает так, что уведомлять пользователя о запрете на копирование нет необходимости, а нужно просто ограничить эту функцию. Одним из способов может быть внесение в тег <body> специального сообщения:

<body oncontextmenu="notmenu();">,

а в теле самой страницы надо при этом разместить скрипт с функцией:

<SCRIPT LANGUAGE = "JavaScript1.1">

function notmenu(){

window.event.returnValue=false;}

</SCRIPT>

Но в этом случае все еще останутся доступными функции выделения текста и его копирования с помощью быстрых клавиш CTRL+C. Если же нужно запретить выделение, копирование и вызов контекстного меню, то в разделе <head> следует поместить следующий скрипт:

<SCRIPT LANGUAGE = "JavaScript">

document.ondragstart = test;

//запрет на перетаскивание

document.onselectstart = test;

//запрет на выделение элементов страницы

document.oncontextmenu = test;

//запрет выведение контектного меню

function test(){

return false

}

</SCRIPT>

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

Рис.1. Полученное с помощью блокировочной функции всплывающее окно

Существует как минимум еще один вариант защиты с использованием модальных окон. Для этого, правда, страницу надо открывать через специальную кнопку:

<BUTTON

onclick=’window.showModalDialog("page.html")’>

Показать</BUTTON>

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

Шифрование страниц

Совсем по другому пути пошла Microsoft, которая еще в 1999 г. анонсировала решение Microsoft Script Encoding, или JScript.Encode. Суть его сводится к кодировке всей страницы в шестнадцатеричный код ASCII. В этом случае ни скопировать, ни сохранить страницу в читаемом виде нельзя, а вот просмотреть в Internet Explorer 5+ - пожалуйста. В основе этой технологии лежат все те же функции Java: для кодировки служит функция escape, а для перекодировки - unescape. Хочу обратить ваше внимание на то, что в Script Encoding применяется кодирование данных, а не их шифрование, т. е. одни символы просто заменяются на другие. Поэтому для прочтения страницы достаточно обладать инструментом, способным вернуть первоначальное значение измененного символа. Технология не использует никаких открытых или закрытых ключей, а значит, может быть реализована любым веб-мастером. Осуществить этот способ шифрования можно как с помощью простенького скрипта на Java, так и с помощью php-, cgi-скриптов. Вот пример кода для шифрования страницы на JavaScript:

<SCRIPT Language = "JavaScript">

mystring = "Вставьте текст"

document.write(escape(mystring));

</SCRIPT>

А вот что отобразит браузер:

%u0412%u0441%u0442%u0430%u0432%u044C%u0442%u0435%20%u0442%u0435%u043A%u0441%u0442.

Рис. 2. Интерфейс программы HTML Guardian

Как видите, совсем непохоже на начальный текст. В таком, зашифрованном, виде страница сохраняется на сайте, а для ее прочтения требуется функция, ответственная за прочтение:

document.write (unescape("3%74...%68"))

Вместо абракадабры из цифр и букв в этом примере используется код, в котором после кодировки находится ваша страница. Для того чтобы его передать в качестве входного значения этой функции, нужны или скрипты-ридеры (что-то типа reader.cgi?page.htm), "читающие" весь ворох ваших страниц по запросу, или дополнительные функции Java. Но дабы не делать ошибок в кодировании-декодировании и не изобретать заново велосипед, Microsoft и придумала специальную технологию JScript.Encode. Как видите, к обычному JScript добавлено определяющее слово Encode. То есть программе-интерпретатору (или браузеру) таким образом передается сообщение о том, что для перекодировки используется обычный JScript и специальных программ для прочтения страницы не требуется. Microsoft предлагает для кодирования специальную программу screnc.exe (http://download.microsoft.com/download/0/0/7/0073477f-bbf9-4510-86f9-ba51282531e3/sce10en.exe). Она позволяет кодировать файлы HTML, ASP, SCT, VBScript и JScript файлы. Кодирование страниц с помощью программы screnc происходит через командную строку, для этого достаточно указать название той страницы, что вы хотите закодировать, и название, какое она будет иметь после кодировки:

screnc mypage.htm codemypage.htm

Правда, кодироваться могут только страницы, имеющие атрибуты Jscript или заранее подготовленные для этой операции, со специально вставленными тегами:

<SCRIPT language="JScript">

<!--//

//**Start Encode**

//А здесь html-код страницы

//-->

</SCRIPT>

Преобразование полученного кода в нормального вида страницу происходит также непринужденно:

<HTML><HEAD>

<SCRIPT language="JScript.Encode">

//**Start Encode** 3%74%72%69%6E%

67%2E%66%72%6F%6D%43%68

</SCRIPT>

</HEAD>

<BODY onload="getAppropriatePage()">

</BODY>

</HTML>

Существуют и определенные требования к браузерам и операционным системам, с которыми работает Script Encoder от Microsoft. Так, в последнем релизе (февраль 2003 г.) указывается, что программа поддерживается операционными системами Windows 2000, Windows 98, Windows ME, Windows NT, Windows XP, а также браузерами Internet Explorer серий 5 и выше. Очевидно, из-за этих своих особенностей Script Encoder и не получил большого распространения. Среди альтернативных вариантов на рынке специализированных программ-кодировщиков можно назвать HTML Guardian (www.protware.com/dl/HTMLGuardian.exe) компании ProtWare (рис. 2). Выглядит она гораздо привлекательней майкрософтовской и позволяет кодировать файлы форматов HTM, HTML, SHTM, SHTML, STN, ASP, JS, VBS, CSS, PHP, INC, а также графические JPG, GIF (не анимированный) и BMP. Помимо этого она может работать с отдельными фрагментами (с референтными ссылками, адресами e-mail) или скриптами HTML-страницы и к тому же закрывать доступ к коду страницы с помощью 384-битного ключа. Главное отличие HTML Guardian от Script Encoder состоит в том, что эта программа предлагает пользователю при кодировании файла определить набор опций кодирования, включающих в себя и ограничения на некоторые функции браузера (например, запрещается нажимать на правую кнопку мыши или использовать файл в режиме офлайн). Кроме того, HTML Guardian, также в отличие от Script Encoder, имеет возможность кодировки страницы и для других браузеров. Что же касается самого популярного IE, то программа может работать только с его версиями 5 и выше. При этом ProtWare гарантирует максимальную безопасность именно при работе с IE5+. Как видите, при всем разнообразии подходов минимальную защищенность веб-страниц могут обеспечить не все из них. Однако даже те инструменты, что представлены сегодня на рынке, все же могут хоть частично обезопасить ваши сайты от взлома и копирования.

Дополнительные материалы: HTML Guardian - www.protware.com , Script Encoder -

www.microsoft.com/downloads/details.aspx?FamilyId=E7877F67-C447-4873-B1B0-21F0626A6329&displaylang = en,

Modal Dialog Method - http://msdn.microsoft.com/library/default.asp?url=/workshop/author/dhtml/reference/ methods/showmodaldialog.asp.

С автором можно связаться по адресу: viacheslavb@ua.fm.

Версия для печати