Web-инжиниринг

Hform


Скрытая передача данных из форм

Обмен данными в Web-технологии подробно рассматривается в другом курсе - "CGI и Формы". Программирование элементов форм обсуждается в разделе "Программируем формы". В данном разделе мы рассмотрим вопрос о возможности передачи данных, скрытых от пользователя.

Рассмотрим следующий пример:



Фамилия:
Имя:
Отчество:
e-mail:

document.f.h1.value = window.location.href;

document.f.h2.value = window.document.referer;

Нажмите на кнопочку "Подписка" и посмотрите после этого на строку Location вашего браузера. Вы обнаружите там два поля, которых нет в заполняемой вами форме,: h1 и h2. Это уже неприятно, хотя сама информация в них не представляет из себя ничего криминального (location.href и document.referer). Это означает, что в тексте страницы есть вызов функции со строками типа:

<script>

document.f.h1.value = window.location.href;

document.f.h2.value = window.document.referer;

<script>

Теперь посмотрим другой пример:

function wo()

{

window.open("hformfr.htm","kuku","width=600,height=200");

}

Если теперь начать вводить данные в левом фрейме окна примера, то, как только вы переходите от поля к полю, в правом фрейме заполняются соответствующие поля. Cкрипт из правого фрейма читает данные из полей левого фрейма. В кодах это будет выглядеть примерно так:

function ask()

{

document.forms[0].elements[0].value=

window.top.frames[0].document.forms[0].elements[0].value;

document.forms[0].elements[1].value=

window.top.frames[0].document.forms[0].elements[1].value;

document.forms[0].elements[2].value=

window.top.frames[0].document.forms[0].elements[2].value;

document.forms[0].elements[3].value=

window.top.frames[0].document.forms[0].elements[3].value;

setTimeout("ask();",100);



}

...

<body onLoad="ask();" bgcolor=lightyellow text=navy>

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

Еще один пример - отправка данных по событию без наличия какой-либо формы в документе вообще.

<form name=hf

action="javascript:window.alert('Ракеты пошли');void(0);"

method=post>

<input name=hfi type=hidden>

&lt/form>

<script>

document.hf.hfi.value = location.href;

</script>

<a href="javascript:window.alert('Ку-Ку...');void(0);"

onClick="document.hf.submit();">

Нажми на ссылочку

</a>

document.hf.hfi.value = location.href;

Нажми на ссылочку

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

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


Содержание раздела