Моя визитка
Урок 1. Хакинг
Урок 2. Антихакинг
Урок 3. Инструменты хакинга
Урок 4. Защита Windows 2000/XP
Урок 5. Проникновение в систему
Урок 6. Реализация цели вторжения
Урок 7. Сокрытие следов
Урок 8. Хакинг браузеров Web
Урок 9. Хакинг почтовых клиентов
Урок 10. Деструкция почтового клиента
Урок 11. Хакинг Web-сайтов
Урок 12. Атаки DoS
Урок 13. Хакинг компьютеров Windows 2000/XP
Урок 14. Хакинг средств удаленного управления
Урок 15. Хакинг брандмауэров
Урок 16. Перехват сетевых данных
Урок 17. Хакинг коммутируемого доступа
Приложение А
Приложение В
Приложение С
Приложение D
Приложение E

ПРИЛОЖЕНИЕ А

Теговая модель
Теги HTML
Динамический HTML

Язык HTML u DHTML

Ресурсы всемирной паутины содержатся в Web-страницах, которые создаются с помощью HTML - языка разметки текста, превращающего обычный документ в гипертекстовый. Вводимые в текст пометки, или, как говорят, теги (от английского «tag» - пометка) HTML, служат как для определения внешнего вида документа на экране компьютера, так и для создания ссылок на другие документы, образующие единую гипертекстовую информационную систему.

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

Поэтому при создании системы защиты компьютера необходимо самым внимательным образом рассмотреть угрозы, возникающие при просмотре ресурсов Web. Перед обсуждением этих вопросов вначале познакомимся с кратким обзором языка HTML.

Теговая модель

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

Таким образом, документ HTML представляет собой не что иное, как обычный текстовый файл с добавленными в него управляющими кодами HTML, оформленными в виде тегов. В листинге 1 представлен простейший код HTML-документа.

Листинг 1. Пример простого документа HTML

На Рис. 1 представлено отображение кода HTML из листинга 1 в окне браузера IE 5.

Рис. 1. Пример простого HTML-документа в окне браузера IE 5

Давайте рассмотрим содержимое кода HTML в листинге 1. Несмотря на простоту, этот код содержит все компоненты обычного документа HTML. В самой первой строке

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN"

содержится информация о примененной для создания документа версии языка HTML - в данном случае, HTML 4.0, и языке документа - EN (английский). В язык HTML 4 заложена возможность ввода этой информации, хотя, как правило, в документах HTML ее опускают. В следующей строке содержится запись <HTML> - это тег, с которого должен начинаться любой документ HTML, после которого помещаются все остальные теги.

Структура документа HTML

Итак, документ HTML состоит из набора тегов. Эти теги должны быть расположены не просто так, а в определенном порядке. Структура документа HTML, согласно спецификации, состоит из следующих компонентов.

• Строки с указанием номера версии языка HTML, использованной для составления документа.

• Декларативного раздела заголовка, заданного тегом <HEAD>.

• Тела документа, содержащего представляемую документом информацию. Тело документа может быть определено с помощью тега <BODY> или тега <FRAMESET>, позволяющего создавать Web-страницы с фреймами - отдельными частями документа, загружаемыми независимо друг от друга по командам пользователя.

Первый компонент не представляет для нас никакого интереса, в отличие от двух остальных, поскольку именно в этих компонентах могут находиться небезопасные элементы загруженного из Web документа HTML. Рассмотрим их подробнее.

Заголовок документа может содержать сценарии - небольшие программы, включаемые в документ HTML для придания ему интерактивных возможностей. Сценарии, встраиваемые в документ HTML, исполняются браузером путем пошагового исполнения (или, как говорят, интерпретации) кода сценария. Таким образом, встраиваемые сценарии не являются обычной исполняемой программой, которая вначале пишется на высокоуровневом языке программирования, а затем преобразуется (или, как говорят, компилируется) в двоичный код, понятный для компьютера. Для включения сценариев в документы HTML применяются контейнерные, т.е. парные (см. ниже), теги <SCRIPT>.

Кроме таких встроенных сценариев в тело и фреймы документа могут быть включены аплеты - небольшие программы, предварительно компилированные в двоичный исполняемый код. Для работы с аплетами пользователям предоставляются средства графического интерфейса, размещенные в документе HTML, т.е. всякие кнопки, переключатели, меню и так далее. Включение аплетов в документы HTML выполняется с помощью тегов <OBJECT> или <APPLET> (последний отнесен организацией W3C к устаревшим средствам HTML).

Еще одним тегом HTML, представляющим для нас особый интерес, является <IFRAME>, позволяющий встраивать фреймы непосредственно в содержимое документа HTML. Некоторые особенности обработки тегов <IFRAME> современными браузерами сделали их настолько небезопасными, что, например, браузеры IE версии старше 5 позволяют отключать использование тега <IFRAME> в настройках параметров безопасности.

Рассмотрим последовательно теги <SCRIPT>, <OBJECT> и <IFRAME>.

Теги HTML

Как видно из листинга 1, каждый тег состоит из имени тега (например, HTML), заключенного в угловые скобки. Обратите внимание на последнюю строку листинга - там расположен тег </HTML>, очень похожий на тег в третьей строке документа. В нем содержится косая черта, означающая, что это - конечный тег. Соответственно, тег <HTML> называется начальным тегом. Такие парные теги называются контейнерными, а все, что находится между начальными и конечными тегами называется содержимым контейнера.

Теги, не имеющие парного конечного тега, называются пустыми, или одиночными; соответствующие им элементы называются автономными. В листинге 1 имеется один такой тег <Р>, называемый тегом абзаца, поскольку текст, расположенный вслед за тегом, будет отображаться в браузере в новом абзаце.

Простейший вариант тега - имя, заключенное в угловые скобки, например <HEAD> или <Р>. Для более сложных тегов характерно наличие атрибутов, которые могут иметь конкретные значения, определенные автором для видоизменения функции тега. Например, в теге <HTML LANG="ru" DIR="LTR"> использован атрибут LANG, который задает язык документа HTML (в данном случае "ru" - русский), и атрибут DIR, который задает направление чтения текста, в данном случае "LTR" - слева направо (оказывается, можно и наоборот).

Общая схема построения контейнера HTML имеет следующий вид: <Имя_тега Список_атрибутов> Содержимое контейнера </Имя_тега>

Контейнерные теги вместе с их содержимым, а также одиночные теги обобщенно называются элементами языка HTML. В языке HTML современной версии 4 (спецификация языка представлена на сайте http://www.w3.org) имеется множество элементов, но здесь мы остановимся лишь на тех, которые интересны с точки зрения обсуждаемой темы безопасности.

Тег <OBJECT>

Начиная с первой версии, язык HTML позволял встраивать в документы HTML изображения, аплеты, видеоклипы и другие ресурсы Web. В HTML версии 4 специально для этой цели был создан новый тег <OBJECT>, который претендует на роль универсального средства внедрения в документы HTML произвольных информационных ресурсов и идет на смену другим тегам - <APPLET>, <IMG>, <EMBED> и некоторых других.

Тег <OBJECT> содержит множество атрибутов, часть которых перечислена ниже.

ID - уникальный идентификатор объекта.

CLASSID - используется для указания местоположения ресурса, реализующего функции объекта. Например, CLASSID может содержать адрес URL программы-обработчика данных, указанных другим атрибутом - DATA (см. ниже).

CODEBASE - определяет базовый адрес, относительно которого указываются адреса ресурсов в других атрибутах тега (например, CLASSID, DATA и ARCHIVE). Если атрибут CODEBASE отсутствует, значением по умолчанию является базовый адрес URL текущего документа.

CODETYPE - определяет тип данных, получаемых при загрузке ресурса, указанного атрибутом CLASSID. Его значениями могут быть, например, "text/html", "image/gif", "video/ropeg", "text/javascript", указывающие, соответственно, на документ HTML, рисунок формата GIF, видеофайл MPEG и сценарий JavaScript.

DATA - указывает местоположение данных объекта. Например, если объект используется для отображения рисунка, DATA содержит адрес файла с изображением. Его значением является относительный адрес URL, установленный относительно базового адреса, заданного атрибутом CODEBASE.

ТУРЕ - определяет тип содержимого для данных, задаваемых атрибутом DATA.

ARCHIVE - содержит разделенный пробелами список адресов URL архивов с ресурсами, требуемыми объекту, в том числе, задаваемые атрибутами CLASSID И DATA.

В большинстве клиентских браузеров имеются встроенные механизмы для воспроизведения основных типов данных, таких как текст, изображения в формате .GIF, шрифты, набор графических элементов. Для воспроизведения же некоторых других типов данных, не поддерживаемых браузерами по умолчанию, они обычно запускают внешние приложения. Тег <OBJECT> как раз и позволяет авторам документов HTML управлять способом воспроизведения данных - либо с помощью внешней программы, либо с помощью некоторой программы, указываемой автором документа HTML. В листинге 2 представлен код HTML с тегом <OBJECT>, примененным для воспроизведения аплета - проигрывателя Microsoft Media Player.

Листинг 2. Пример простого документа HTML

To, что отобразится в диалоге браузера IE 5 при загрузке кода из листинга 2, представлено на Рис. 2.

Рис. 2. Отображение аплета - проигрывателя Windows Media Player

В листинге 2 атрибут CLASSID определяет ресурс, воспроизводимый тегом <OBJECT>. Для этого используется так называемый уникальный идентификатор CLSID, который в системе Windows присваивается каждому аплету, созданному на основе средств программирования аплетов, предложенных и развиваемых фирмой Microsoft.

Идентификаторы CLSID используются в любой программе, построенной на основе технологии OLE (Object Linking and Embedding - Связывание и внедрение объектов). OLE - это общее название объектно-ориентированных технологий Microsoft, с помощью которых одни программы предоставляют свои сервисы другим программам. Вы используете технологию OLE каждый раз, когда, например, перетаскиваете текст из одного текстового документа в другой с помощью буфера обмена Windows. На основе технологии OLE можно, помимо всего прочего, создавать аплеты, которые в этом случае называются элементами ActiveX. Подробнее с технологией OLE можно познакомиться в одном из множества руководств.

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

Тег <IFRAME>

Язык HTML позволяет воспроизводить документы HTML в нескольких областях окна браузера Web; эти области называются фреймами (от английского «frame» - кадр, окно). Фреймы могут представлять собой независимые окна, или же занимать области внутри одного главного окна, деля его на части. Благодаря этому свойству фреймов Web-дизайнеры могут оставлять некоторую информацию документа HTML постоянно видимой в одном фрейме, в то время как остальную информацию воспроизводить в дополнительных фреймах, снабженных средствами прокрутки содержимого.

Тег <IFRAME> позволяет встраивать фреймы непосредственно внутрь текстового фрагмента в документе HTML. В листинге З представлен код HTML с тегом <IFRAME>, который встраивает в текст фрейм, отображающий технические характеристики автомобиля.

Листинг З. Пример встроенного фрейма в документе HTML

Воспроизведение кода HTML из листинга З в окне браузера IE 5 представлено на Рис. З.

Рис. З. Пример документа HTML со встроенным фреймом

На первый взгляд тег <IFRAME>, так же как и отображаемый фрейм, вполне безобидены, однако, как ни странно, тег <IFRAME> служит основой для множества атак, опирающихся на уязвимости системы безопасности браузеров Интернета и почтовых клиентов. Опишем некоторые из них.

Динамический HTML

В языке HTML имеются средства для превращения простого текста в, по сути дела, небольшое приложение, с возможностями интерактивного взаимодействия с посетителями сайта. В набор этих средств входят формы и сценарии, помещаемые в документ HTML. Формы включаются в документ HTML с помощью тега <Form>, а сценарии - с помощью тега <Script>. Рассмотрим их по порядку.

Тег <Form>

В листинге 4 приведен код HTML простой формы, предлагающей посетителям узла подписаться на рассылку новостей. Интерпретация этой формы браузером IE 5 представлена на Рис. 4.

Листинг 4. Форма опроса посетителей странички Web

Рассмотрим код в листинге 4. Он содержит элемент FORM, в контейнер которого включено несколько элементов новых для нас типов - LABEL и INPUT. Функции элемента LABEL очень просты - он отображает надпись возле поля ввода данных. Поле ввода представляет собой обычный элемент управления, типа используемого в системе Windows для ввода информации с клавиатуры компьютера (см. Рис. 4). Каждому такому полю в коде HTML соответствует элемент INPUT с атрибутом TYPE, равным "text". Атрибут TYPE задает тип элемента управления, определяемого элементом INPUT, в данном случае - поле ввода. Другими значениями атрибута TYPE в коде листинге 4, как видим, являются "checkbox", "submit" и "reset", отвечающие за воспроизведение, соответственно, флажка, кнопки подтверждения и кнопки сброса. Все эти элементы управления по своим функциям соответствуют обычным элементам, применяемым, например, в диалогах Windows.

Рис. 4. Форма опроса посетителей

Обработка данных в форме

Посмотрим, как будет работать форма из листинга 4. Загрузив с сервера Web-страницу с формой на свой компьютер, пользователь в окне клиентского браузера вводит свои данные в поля формы, щелчком мыши устанавливает флажок, фиксирующий согласие на подписку, и щелкает на кнопке Отправить. Если ему потребуется отменить (сбросить) введенную информацию, он щелкает на кнопке Сброс. После щелчка на кнопке Отправить клиентский браузер пересылает данные, введенные в форму, на сервер, содержащий сценарий обработки данных формы. Этот сценарий автор документа HTML должен указывать с помощью адреса URL, присвоив его атрибуту ACTION элемента FORM, например, так, как это сделано в листинге 4:

<FORM ACTION="http://www.anysite.com/prog/addsubs" METHOD="post">

Здесь указано, что для обработки данных формы следует использовать программу addsubs, хранимую в каталоге /prog сервера http://www.anysite.com. Получив от браузера такого рода сообщение, сервер распознает, что по указанному в сообщении адресу находится программа. Это заставляет сервер запустить указанную программу и передать ей на обработку полученные данные формы. Метод передачи этих данных программе определяется атрибутом METOD элемента FORM. В данном случае указан метод post, но имеются и другой, более популярный метод - get (оба этих метода описаны в Приложении В).

Весь процесс обработки данных формы на сервере организуется согласно протоколу CGI (Common Gateway Interface - Общий шлюзовой интерфейс), являющемуся стандартом, который определяет методы предоставления данных формы обрабатывающей программе и структуру этих данных (см. Приложение В). После обработки формы сценарий, используя средства, обеспечиваемые протоколом CGI, может переслать клиентскому браузеру ответное сообщение, которое отобразится на его экране.

Согласно протоколу CGI информация шлюзам передается в следующем формате.

Имя1=Значение1&Имя2=Значение2&.. .

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

В случае метода GET эта строка передается как часть адреса URL запроса и будет передана шлюзу в переменной окружения QUERY_STRING (см. Приложение В).

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

Приведем пример обработки формы с помощью описанной выше процедуры. Возьмем в качестве примера форму из листинга 4. После подтверждения формы и отправки ее данных на сервер для обработки методом POST (поскольку в элементе FORM атрибут METHOD равен "post") в программу-сценарий во входном потоке поступит 42 байта, закодированных таким образом:

postal-address=ivan@email. coxn&subscribe=on

В этом случае сервер установит значение переменной CONTENT_LENGTH равным 42, а переменной CONTENT_TYPE равным "application/x-www-form-urlencoded". Первым символом в стандартном потоке ввода для сценария будет символ "р", за которым будет следовать остаток закодированной строки.

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

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

Тег <SCRIPT>

Теги <SCRIPT> позволяют включать в документы HTML так называемые клиентские сценарии, представляющие собой мобильный, перемещаемый вместе с Web-страницей, программный код, исполняемый на компьютере-клиенте Web. Загруженные в компьютер сценарии исполняются в ответ на различные события, происходящие с документом HTML, отображаемым в браузере. В число таких событий входят загрузка документа HTML в браузер, перемещение мыши над определенными областями документа HTML, отображаемыми в диалоге браузера, и другие события, аналогичные тем, что происходят при интерактивном взаимодействии пользователя с диалогами системы Windows.

Вообще говоря, сценарии, включаемые в документы HTML, бывают двух типов.

• Сценарии, выполняемые один раз при загрузке документа клиентским браузером. Для включения в документ HTML таких сценариев следует использовать тег <SCRIPT>, контейнер которого предназначен для хранения кода программы сценария.

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

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

Тег <SCRIPT> позволяет встраивать сценарий в любое место документа HTML, как в декларативный раздел, содержащийся в контейнере тега <HEAD>, так и в тело документа, содержащегося в контейнере тега <BODY>, причем произвольное число раз. Ниже перечислены некоторые атрибуты тега <SCRIPT>.

SRC - определяет адрес URL внешней программы-сценария, т.е. программы, хранимой вне данного документа, в том числе в сети Web.

ТУРЕ - задает язык программирования сценария в контейнере данного тега <SCRIPT>. Например, значение "text/javascript" указывает на использование языка JavaScript.

Сценарий может храниться в контейнере тега <SCRIPT> или во внешнем файле. Если атрибут SRC не установлен, клиентские браузеры интерпретируют содержимое контейнера <SCRIPT> как код сценария. Если атрибут SRC содержит адрес URL, клиентские браузеры игнорируют содержимое контейнера <SCRIPT> и загружают сценарий из источника, указанного адресом URL.

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

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

<SCRIPT TYPE="text/javascript">

document.write ("Приветствуем, посетитель!")

</SCRIPT>

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

Встроенные события

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

<А HREF="http://www.anysite.com/index.html"

onMouseOver="window.status='Щёлкни меня, если не боишься!'; return

true;">Щелкни меня</А>

В этом примере код обработчика очень прост:

window.status='Щелкни меня, если не боишься!'; return true;

Сценарий отображает в строке состояния браузера (встроенный объект window) сообщение и завершается. Однако сценарии могут быть и не столь простыми и могут выполняться в ответ на множество других событий документа. Ниже перечислены атрибуты внутренних событий языка HTML вместе с их кратким описанием.

• Событие ONLOAD происходит, когда браузер заканчивает загружать документ или все фреймы элемента FRAMESET. Этот атрибут может использоваться в элементах BODY и FRAMESET.

• Событие ONUNLOAD происходит, когда браузер удаляет документ из окна или фрейма. Этот атрибут может использоваться в элементах BODY и FRAMESET.

• Событие ONCLICK происходит при однократном щелчке кнопки указующего устройства на элементе. Этот атрибут может использоваться с большинством элементов.

• Событие ONDBLCLICK происходит при двойном щелчке кнопки указующего устройства на элементе. Этот атрибут может использоваться с большинством элементов.

• Событие ONMOUSEDOWN происходит при нажатии кнопки указующего устройства на элементе. Этот атрибут может использоваться с большинством элементов.

• Событие ONMOUSEUP происходит при отпускании кнопки указующего устройства на элементе. Этот атрибут может использоваться с большинством элементов.

• Событие ONMOUSEOVER происходит при перемещении указующего устройства на элемент. Этот атрибут может испрльзоваться с большинством элементов.

• Событие ONMOUSEMOVE происходит при перемещении указующего устройства, когда оно находится на элементе. Этот атрибут может использоваться с большинством элементов.

• Событие ONMOUSEOUT происходит при перемещении указующего устройства за пределы элемента. Этот атрибут может использоваться с большинством элементов.

• Событие ONFOCUS происходит при получении элементом фокуса с помощью указующего устройства или обходах по клавише табуляции. Этот атрибут может использоваться со следующими элементами: LABEL, INPUT, SELECT, TEXTAREA И BUTTON.

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

• Событие ONKEYPRESS происходит при нажатии и отпускании клавиши клавиатуры, когда фокус находится на элементе. Этот атрибут может использоваться с большинством элементов.

• Событие ONKEYDOWN происходит при нажатии клавиши клавиатуры, когда фокус находится на элементе. Этот атрибут может использоваться с большинством элементов.

• Событие ONKEYUP происходит при отпускании нажатой клавиши клавиатуры, когда фокус находится на элементе. Этот атрибут может использоваться с большинством элементов.

• Событие ONSUBMIT происходит при отправке формы. Оно используется только в элементе FORM.

• Событие ONRESET происходит при сбросе формы. Оно используется только в элементе FORM.

• Событие ONSELECT происходит при выделении пользователем некоторого текста в текстовом поле. Этот атрибут может использоваться с элементами INPUT И TEXTAREA.

• Событие ONCHANGE происходит при потере управляющим элементом фокуса ввода, если его значение было изменено с момента получения фокуса. Этот атрибут используется со следующими элементами: INPUT, SELECT и TEXTAREA.

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

Все без исключения элементы управления, помещаемые в документ HTML, типа INPUT, SELECT, BUTTON, TEXTAREA и LABEL, реагируют на определенные встроенные события. Кроме использования таких элементов в формах, они могут быть включены в документы HTML для улучшения графического интерфейса с документом. Например, авторы могут включать в документы кнопки, которые не просто подтверждают форму, но позволяют наладить интерактивное взаимодействие пользователя с сервером.

Опишем, как можно получать доступ к элементам HTML из кода сценария.

Вызов функций сценария

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

Листинг 5. Форма проверки паролей посетителей сайта Web

На Рис. А.5 представлена интерпретация этого примера браузером IE 5.

Рис. 5. Форма ввода пароля

В следующем примере (см. листинг 6) мы ассоциируем программу обработчика события щелчка на кнопке с методом объекта кнопки с помощью кода window.document.myform.mybutton.onclick = my_onclick.

Листинг 6. Определение обработчика щелчка на кнопке

После этого щелчка на кнопке будут отображать окно сообщения с приветствием посетителю.

Hosted by uCoz