[ Главная страница ]  [ Омар Хайям ]
[ Гадание на рубаи ]  [ Популярная наука ]  [ Живая История ]  [ Гостевая книга ]  [ Новости сайта ]



Можно ли скрыть исходный текст
своей WEB - страницы?

Прежде всего, подчеркнем, что речь идет о самом обычном html - файле, и при решении задачи будут рассматриваться только серверонезависимые, доступные любому пользователю подходы.

Первый встречный вопрос, который должен возникнуть у любого нормального человека, - "А зачем?". Безусловно, в подавляющем большинстве случаев вопрос, вынесенный в заголовок статьи, носит параноидальный характер и вызван навязчивой идеей скрыть от других пользователей уникально-гениальный исходный текст своей страницы, дабы другие ворюги web-мастера (вор на воре!) не сперли целый букет заложенных в ней принципиально новых передовых идей.

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

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

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

Покажем, например, как простейшая шифровка WEB-страницы может быть произведена с помощью языка Java Script.

Возьмем такую простейшую страничку (фрагмент, относящийся к баннеру, здесь и далее опущен):

<html>
<body>
<center><font size="+2">Секреты <a href="http://gorodovoi.da.ru">
Японского Городового.</a></font></center> 
</body>
</html>

Любой пользователь, мало-мальски знакомый с языком программирования Java Script, понимает, что того же результата можно добиться, создавая поток вывода (иногда такой прием очень даже полезен), включив весь текст страницы в скрипт. Получится что-то вроде:

<html>
<head>
<SCRIPT LANGUAGE="JavaScript">
<!--
Start();
function Start() {
var line='';
line+= '<center><font size="+2">Секреты <a href="http://gorodovoi.da.ru">';
line+= 'Японского Городового.</a></font></center>'; 
document.write(line);
return 0; }
//-->
</SCRIPT>
</head>
<body>
<p> </p>
</body>
</html>

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

<html>
<head>
<SCRIPT LANGUAGE="JavaScript">
Start();
<!--
function gorodovoi(joke) {
var text='';
for (var num = joke.length -1; num >= 0; num=num-2) 
{text = text + joke.charAt(num)};
for (var num = joke.length; num >= 0; num=num-2) {text = text +
joke.charAt(num)};
return text;
}

function Start() {
document.write(gorodovoi('>oldmotrho/g/y:dpotbt/h<">=rfeetrnhe ca/<
< >ыtтnеoрfк/е<С>>a"/2<+."о=гeоzвiоsд оtрnоoГf <о>гrоeкtсnнeоcп<Я>>
y"duorb.dl.mitohv<'));
return 0;
}
//-->
</SCRIPT>
</head>
<BODY>
<p> </p>
</body>
</html>

Чтобы исходник выглядел еще страшнее, можно дать какие-то совершенно нелепые имена переменным в скрипте и записать все в одну строку (это совсем просто, мы сейчас здесь этого делать не будем).

Кроме того, в текст странички вместо строки Start(); можно вставить простенький фрагмент, проверяющий, откуда она загружается и запрещающий это делать с любого адреса (например, с диска пользователя), кроме ее собственного. Посетитель будет автоматически перенаправляться в "родное гнездо" странички. Вот этот фрагмент:

var myhome= "http://www.gorodovoi.nev.ru/test2.htm";
if (window.location != myhome) 
{alert('This file is not in its true URL.');
document.write('<CENTER><H3>Transferring to the 
true URL:<BR>',myhome,'</H3></CENTER>');
window.location = myhome;}
else Start();

Наконец, в "шапку" можно вставить специальные META-операторы, предписывающие вычищать нашу страничку из cash-а (если Вы их вставляете только из соображений защиты, то это уже мания преследования в стадии кульминации!):

<META HTTP-EQUIV="Cache-Control" CONTENT="no-cache">
<META HTTP-EQUIV="Expires" CONTENT="Tue, 26 Jan 1999 21:29:02 GMT">
<META HTTP-EQUIV="Pragma" CONTENT="no-cache">

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

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

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

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

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

А мы ему в ответ...

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

Возникает вопрос - занимается ли кто-нибудь всерьез вопросами шифрования html-кода, и можно ли найти в сети какие-нибудь готовые программы на эту тему. "Если в сети чего-нибудь нет, то Вы не умеете искать" (афоризм Японского Городового (:-))). Конечно есть! Вот сайт некой калифорнийской компании Amazing Websites (Heaven's Rage). Ее главный продукт - программа Psyral Phobia. С характерной скромностью утверждается, что "Psyral Phobia is the only and the most powerful HTML encoder".

Какой же алгоритм шифровки использует эта программа? Ничего принципиально нового по сравнению с вышеизложенным здесь не предлагается, да, наверное, это и невозможно. Старые версии (я смотрел 2.1) производили шифровку весьма не разумно. Текст, так же, как в нашем примере, переписывался справа налево через один символ, но не в два, а в один проход. Пустые места между символами просто заполнялись случайным мусором. В результате длина странички удваивалась, что, конечно, неприемлемо. Однако при этом русскоязычные странички шифровались также успешно, как англоязычные. Правда, для совместимости с Netscape3x нужно было специально позаботиться о букве "я" (см. статью "Семь золотых правил для начинающих, но подающих надежды Web-мастеров").

В новой (на момент написания статьи) версии 3.0 авторы поступают по-другому. Текст просматривается в прямом порядке, а символы заменяются в соответствии с определенным "нелинейным" алгоритмом, использующим некий стандартный набор символов - ключ, который, в принципе, может изменяться.

Вот фрагмент, поясняющий идею алгоритма (здесь mC - ключ, eS - входная, зашифрованная строка, nS - выходная, расшифрованная):

function codeIt (mC, eS) { 
var wTG, mcH = mC.length / 2, nS = "",dv; 
for (var x = 0; x < eS.length; x++) { 
wTG = mC.indexOf(eS.charAt(x));
if (wTG > mcH) { 
dv = wTG - mcH; nS = nS + mC.charAt(48 - dv); } 
else
{ dv = mcH - wTG; nS = nS + mC.charAt(48 + dv); } 
} 
return nS; 
}

Здесь, однако, другая беда - в используемый программой ключ mC не входят символы национальных алфавитов, и кодировка русскоязычных страничек оказывается невозможной. У этой версии есть и еще один недостаток (он известен авторам) - некорректная работа с Netscape 4.5. Вообще, поскольку компания зарабатывает деньги своей программой (зарегистрированная версия стоит $40), можно было бы отнестись к делу посерьезнее, тем более, что поставленная задача не слишком сложна.

Интересно мнение авторов о предоставляемой программой степени защиты: "A professional cryptographer could probably figure out the encoding in an hour or two". Тут можно возразить авторам, что час или два потребуется профессионалу только в первый раз, пока у него нет написанной им программы для дешифровки. В следующий раз, если серьезно не будет изменен алгоритм шифрования, это займет уже несколько секунд - время работы заготовленной программы.

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

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

Автор искренне надеется, что эта статья не вызовет эпидемии шпиономании в INTERNET, а просто обратит внимание на один из занятных и малоизвестных моментов, связанных с Web-строительством.




  |
Warning: in_array() [function.in-array]: Wrong datatype for second argument in /users/n/e/nev.ru/html/www.gorodovoi/a6ba2b321a98f3fce9ea3a7a7e20737c/sape.php on line 192
|


  [ Главная страница ]  [ Омар Хайям ]
[ Гадание на рубаи ]  [ Популярная наука ]  [ Живая История ]  [ Гостевая книга ]  [ Новости сайта ]


Вернуться к главной странице

Copyright c 1999 Японский Городовой
E-mail: gorodovoi@nev.ru