§10. Защита информации на
веб-странице Readonly forever
Написать эту статью меня натолкнула строчка, <body
oncopy="return false"> , которая защищает содержимое страницы от
копирования. "Неужели все так просто" — подумал я. Но разобравшись, я
понял, что защищает она только от чайников, которые не знают — что такое
ViewSource, и пользуются только IE. Потом, я нашел парочку скриптов,
которые запрещали правый клик мышкой, лишая чайника контекстного меню. Но
есть "главное меню", и там все продублировано... Как тут быть?
Как защитить информацию на веб-странице? "И тут Остапа
понесло..."
Что-бы Вас заинтересовать, попробуйте скопировать что либо с этой
страницы → эта страница.
Поставленная задача?
- Во-первых — защитить код. (с исходного кода всегда можно выделить
нужную информацию)
- Во-вторых — защитить объекты на странице, т.е. они должны быть
видимыми, но не копируемыми.
- В третьих — все это должно работать во всех браузерах, иначе есть
риск ничего не увидеть (или увидеть абракадабру).
При всем при этом нужно предусмотреть вариант скачивания страницы через
ФТП и обезопасить страницу от этого.
Что можно защищать?
- В стране, где слово "CopyRight" почти ничего не значит, авторскую
информацию нужно защищать всеми доступными методами.
- Картинки, рисунки и другие графические объекты.
- Написанный вами скрипт, на который вы потратили три бессонных
ночи, и который хотите презентовать только у себя на сайте
- Книги on-line...
Как это сделать?
Этап 1: Создаем скрипт, который защитит объекты
страницы (текст, графика) от копирования.
<script>
var bbb=1;
function rf(){
return false } //эта ф-ция не дает
событию исполнится
//определяем действия
для Netscape if(document.layers || (window.captureEvents
&&
!(document.all))){ document.captureEvents(Event.MOUSEDOWN); document.onmousedown=rf; self.blur()
//убираем фокус со страницы
(делаем невозможным выделение
текста) bbb=2; }
//определяем действия для Opera else if
(window.captureEvents){ document.write("<input type=Text
style='visibility:hidden;position:absolute' id=ht
onblur='this.focus()'>"); ht.focus();
//убираем фокус со страницы и
даем его скрытому полю ввода }
//определяем действия для IE else
if(document.all) document.onselectstart=rf;
//запрещаем выделение текста в
IE
document.oncontextmenu=rf; //отключаем контекстное меню в IE и
Netscape
//проверка имени сервера страницы,
открывшего
данную if(window.opener!=undefined&&window.opener.location.host==location.host&&location.host!='')
bbb=0;
</script>
//запрет вывода,
если имена серверов не совпадают <script> if(bbb==2)
self.close(); if(bbb!=0) document.write("<div
style='display:none'><noscript>"); </script>
!!! Именно последних пару строчек кода делают невозможным:
- отображать вашу страницу не на вашем сервере
- отображать вашу страницу с других ссылок
- отображать вашу страницу локально на компьютере (если она, например,
была скачана через ФТП)
Особенности...
Нюанс1: страница должна иметь запрет на
кеширование (а то догадливые могут найти некоторые рисунки в файлах,
кешированих броузером). Это можно сделать так:
<meta
http-equiv="Cache-Control" content="no-cache">
Нюанс2: графические объекты должны
отображаться как фон некоторого контейнера (тега). Напр.: <div
style="background:url(img.jpg) no-repeat; width:500; height:404;"
title="Рисунок"></div> вместо <img
src="img.jpg" width="500" height="404" alt="Рисунок" border="0">
Нюанс3: для более надежной безопасности ссылка
открывающая защищенную страницу должна иметь примерно вот такой
вид:
<a href="#" onClick="self.open('page.html', 'testwin',
'toolbar=0,location=0,directories=0,menubar=0,status=1,scrollbars=1,resizable=1')">защищенная
страница</a>
Этап 2: Шифруем код страницы. На стадии
шифрования Вы можете использовать любые алгоритмы и хитрости.
Основная схема шифровки выглядит так:
Подшиваем к коду страницы скрипт, приведенный выше (для защиты видимой
информации и других объектов)
Шифруем все это с помощью какого-либо алгоритма (переводим в
ASCII-коды или сдвигаем биты или открытым ключом...)
К зашифрованному коду подшиваем функцию расшифровки (тоже на
JavaScript)
Свой шифратор я сделал в таком виде → Шифратор.
Функция расшифровки — самое уязвимое место. Через нее можно понять
алгоритм шифрования и раскодировать шифр. Хотя для этого понадобятся
хорошие знания программирования и JavaScript-спецификации.
Статистика: 99 посетителей не сможет извлечь
требуемую информацию, НО найдется один, который не пожалеет денька и
расшифрует вашу страничку.
Рекомендация: не стоит таким образом защищать
жизненно важную информацию, от которой зависит Ваша судьба или судьба
Ваших близких.
Недостатки:
не работает без JavaScript
при шифровании, иногда, объем файла увеличивается (с моим методом
шифрации — в 3 раза!!!)
уязвимость перед взломом (как и все программы)
Альтернатива: технология Flash.
Выводы Все это, конечно, заслуживает
внимания, но не стоит забывать что актуальность методов в этой статье
временна. Через год-два данные механизмы могут не работать (напр. в
каких-то новых популярных броузерах), а возможно появятся новые способы
защиты, на порядок превосходящие этот. Поэтому не забудьте посмотреть
на дату создания.
Создано: 1.10.2004 Автор: Stipuha
Другие мнения...
|
0205 |
Автор: Stipuha |
07.02.2005 21:10 |
|
Я рассмотрел ваши впредложения и слегка
усовершенствовал алгоритм защиты. Если есть еще какие-то
глупые дыры -- сообщайте... |
|
0176 |
Автор: Неизвестный |
27.12.2004 13:22 |
|
Все выдирается на ура но идея нечего |
|
0174 |
Автор: Неизвестный |
23.12.2004 17:16 |
|
Это бред все, картинку можно выдрать сделав
принтскрин. а можно еще проще просмотрев что броузер просит у
сервера. А текст даже если ты его в имидж превратиш можно загнать
всегда в файнридер и распознать через тот же принтскрин. |
|
0109 |
Автор: Неизвестный |
29.11.2004 13:38 |
|
Идеи конечно у всех хорошие, но все
шифрования и попытка скрыть скрипт и обезопасить картинку от
скачивания абсолютно не имеют смысла. При кешировании данных не
нужно быть супер-хакером, хакером, продвинутым юзером или обладать
еще каким-либо почетным титулом, чтобы просмотреть код страницы
через любой текстовый редактор в папке Temporary Internet Files, там
же находится и картинка :)) |
|
0087 |
Автор: Stipuha |
02.11.2004 19:16 |
|
:) |
|
0085 |
Автор: Неизвестный |
01.11.2004 20:21 |
|
У вас всех крыша съехала на почве защиты
своих сиюминутных текстовых творений текстов и элементарных
скриптов. |
|
0077 |
Автор: Lain |
26.10.2004 17:08 |
|
День добрый. Я, в общем-то, полный ламер
:), так что о методах шифрации ничего сказать не могу. Насчет
тестовой странички: Картинка выдирается наведением мыши, затем
щелчком по дискетке (IE); Текст — File/Save as, сохраняем как
текст (там же); Насчет скрипта с часами — эх, знать бы что это
вообще такое, может, тоже бы забрала :) |
|
0073 |
Автор: VanGog |
15.10.2004 08:45 |
|
Да там нет ничего сложного. Предлагаю вам
сделать другой шифровщик, более сложный. Уверен, что и его можно
легко будет расшифровать. К тому же зашифрованная страница, особенно
если большая, может загружаться очень долго (секунд 10-15), поэтому
этот вариант не подходит. |
|
0072 |
Автор: Stipuha |
14.10.2004 19:29 |
|
Если Вы все таки сумели расшифровать код —
поздравляю, у вас хороший уровень знаний ЯваСкрипт. Можете придумать
свой более сложный. Также можете сообщить сюда, какой-то
одной строчкой из зашифрованного файла.
Внимание: Шифровщик на эХперименте — это лишь
демонстрационный пример, не претендующий на звание "лучший
шифровщик" и код его не является тайной. |
|
0071 |
Автор: VanGog |
14.10.2004 19:17 |
|
Мое мнение: шифратор неплохой (ламеры не
осилят), но обычным пользователем расшифровывается за несколько
минут. |
|
0068 |
Автор: Неизвестный |
11.10.2004 13:21 |
|
н-даа, зашибезно... мне только рисунок
удалось выдрать оттуда... | |