Введение в Java, JavaScript и ActiveX
Введение в Java, JavaScript и ActiveX
Java-, JavaScript- и ActiveX-компоненты часто недооцениваются с точки зрения ущерба, который они могут нанести сайту. Эти компоненты исполняются на компьютере клиента-посетителя сайта. Вот почему непосредственную угрозу эти технологии представляют именно для посетителя, а не для систем Web-сайта. Однако некоторые скрипты или апплеты могут отразиться и на работе сервера - согласитесь, если компьютер пользователя будет «подвисать» при посещении страниц вашего сайта, то это не менее серьезно, чем отказ в обслуживании со стороны сервера.
В следующих разделах главы мы увидим, что Java-апплеты, ActiveX-компоненты и JavaScript могут не только воздействовать на клиентские системы, но и применяться в атаке на сайт. Отразить такого рода атаку можно, если отслеживать программы, исполняющиеся на сайте, и не допускать применения «некачественных» функций.
Проблемы, связанные с применением Java, JavaScript и ActiveX
Web-дизайнеры часто используют программы, доступные в Internet и созданные другими людьми. Часто они даже не знают точно, как написаны эти программы и что именно они делают. Java-апплеты могут быть подписаны цифровым сертификатом, но эти подписи могут быть сняты разработчиком HTML-страницы. Хакер может использовать апплет для разрушения файлов на диске пользователя или для исполнения других программ. Помните, что апплеты - это прежде всего программы, которые, как и любые другие npoSrpaMMbi, могут осуществлять зловредные операции на вашем компьютере.
Java - это язык программирования, разработанный компанией bun и применяемый для написания Internet-приложений (апплетов). Они интегрируются в HTML-страницы и запускаются после того, как соответствующая страница закачивается браузером пользователя. Java предоставляет целый ряд возможностей обеспечения защиты. Во время сборки апплета компилятор производит проверку кода и типов данных на наличие ошибок. Определенные сегменты памяти недоступны для адресации из Java-программы. Исполняет код виртуальная Java-машина (JVM), которая использует встроенный менеджер безопасности (Security Manager). Этот менеджер контролирует доступ с помощью правил безопасности. Однако в свое время была найдена уязвимость в виртуальной машине Netscape, а позже - в Java-машине Microsoft Internet Explorer. Ошибка была связана с тем, что не весь код проверялся на соответствие типам данных.
Java исполняется на клиентской машине, и ошибки, так же как и недоброкачественные программы, воздействуют на систему пользователя, а не на Web-сервер. Однако апплет способен считать имя пользователя и пароль, что может использоваться злоумышленником при непосредственном взломе сайта. Кроме того, пользователь, чья система была скомпрометирована, поймет, что проблема возникла после посещения определенного сайта. Это уже отразится на вашем имидже, как поставщика информационных услуг.
ActiveX - это разработка апплетов компании Microsoft. Компоненты размещаются в HTML-коде с помощью тега <OBJECT>. Компоненты ActiveX могут предоставлять разнообразные функции, среди которых, например, мультимедиа. При вызове страницы с ActiveX браузер проверит наличие компонента на компьютере пользователя, и если данной программы нет, то она будет закачена и загружена в память.
В 1999 году заговорили о проблеме, связанной с ActiveX, когда была найдена уязвимость так называемого флага Safe for Scripting. Программисты могли установить этот флаг в тексте программы, и при вызове компонент не проверялся на соответствие подписи Authenticode, которая используется Microsoft в качестве технологии подписи программного кода (об этом мы поговорим позже). Итак, вместе с IE4 вышли в свет два «неблагополучных» компонента: Scriptlet-typelib, позволяющий редактировать файлы на пользовательском компьютере, и Eyedog.ocx, который читал Windows-реестр. Позже Microsoft выпустила программное обновление для этой версии IE, которое можно было найти на сайте компании.
Рекомендуемые материалы
JavaScript отличается от Java и ActiveX именно тем, что это скриптовый язык и полученный код не собирается компилятором в бинарную программу. Но, несмотря на это, JavaScript использует функции и синтаксис Java. Когда пользователь скачивает документ, содержащий JavaScript-функции, этот код обрабатывается интерпретатором, встроенным в браузер. Это сравнительно медленная процедура, и JavaScript - менее производительный, чем Java.
Итак, JavaScript - это прежде всего скрипт. Но хакер может использовать его для компрометации сервера или пользовательской системы так же, как и Java-программу.
Предупреждение атак с использованием Java, JavaScript и ActiveX
Возможных проблем с использованием рассматриваемых языков избежать можно, но для этого надо предусмотрительно выполнить некоторые действия. Прежде всего вам придется отказаться от компонентов, производителям которых вы не можете безоговорочно доверять или функциональность которых не совсем ясна. Старайтесь не работать с программами, если не имеете доступа к их исходным текстам. Лучше воспользоваться компонентами известных фирм, которые распространяют ПО на CD или в Internet.
Прежде чем встроить компонент в HTML-документы, убедитесь, что он работает корректно и не имеет уязвимостей. Обычно в целях проверки новый компонент размещают на странице, к которой нет ссылок с других страниц сайта. Также можно проверить работу программы на тестовом сервере, аналогичном действующему в Internet. При этом логично тестировать от имени посетителя страницы, на которой будет размещен компонент, то есть используя соответствующую учетную запись.
Хакеры часто пытаются получить преимущество от скриптов и программ, которые работают с вводом данных. Прежде уже упоминалось о проблеме, связанной с SSI и гостевыми книгами. Аналогичным способом злоумышленник может выполнить CGI-программу, написанную на Perl, которая, в свою очередь, обратится к командному файлу. Например, можно найти скрипт, который запустит процессор cmd.exe и далее, с его помощью, практически любую программу на сервере.
Постарайтесь сделать так, чтобы пользовательский ввод четко контролировался. Для этого можно воспользоваться любой терминальной программой (например, telnet) и эмулировать обращения со стороны клиента.
В предыдущем разделе утверждалось, что HTML-документы часто содержат информацию, которая способна помочь хакеру. Это, без всякого сомнения, относится и к скриптам, встраиваемым в текст HTML. Бывает и так, что исходный код страницы содержит скрипт обращения к SQL-серверу,
а вместе с ним пароль и имя пользователя.
Программирование защищенных скриптов
В предыдущем разделе мы рассматривали программы, работающие на клиентской машине посетителя сайта. Теперь пришло время поговорить о серверных скриптах, которые исполняются на сервере и имеют в основном несколько другое предназначение. Такие скрипты работают с базами данных, используются для поиска информации на сайте и т.д.
Серверные скрипты более надежны хотя бы потому, что их исходные тексты скрыты от посетителей. Это особенно актуально, если сайт содержит конфиденциальную информацию и вы не хотите, чтобы кто-то получил доступ к корпоративному серверу баз данных.
CGI служит связующим звеном между Web-сервером и Internet-приложениями, что позволяет посетителям взаимодействовать с серверами. Все начинается с того, что пользователь (браузер) отсылает запрос CGI-скрипту. Например, посетитель заполняет форму на HTML-странице и нажимает на кнопку Готово (Submit). При этом отправляется запрос скрипту - обработчику данной формы. Скрипт исполняется на сервере, и соответствующая информация возвращается посетителю в виде HTML.
Web-сервер благодаря URL-ссылке в атрибутах формы «знает», что данные, вводимые в форму, должны передаваться приложению. Например:
Вам также может быть полезна лекция "6. Планирование процессов".
Здесь данные отправляются на сайт microsolved.com и передаются скрипту, написанному на Perl, - myprog.pl.
Perl - это еще один скриптовый язык программирования, который имеет синтаксис языка С. Perl достаточно широко применяется, и хороший тому пример - сервер Apache, который имеет надстройки, позволяющие хранить Perl-скрипты в памяти и не обращаться к ним через файловую систему при каждом посещении страницы.
У компании Microsoft существует своя альтернатива Perl и CGI. Это технология ASP, которая позволяет встраивать серверные скрипты непосредственно в код HTML-страниц. Причем эти скрипты могут быть написаны на разных языках, среди которых JScript и VBScript. Преимущество ASP -в скорости создания на сервере результирующего HTML, видимого посетителю.
К сожалению, ASP не лишена недостатков, присущих скриптам, которые исполняются на машине клиента. Исходный текст скриптов, встраиваемых в HTML, в ряде случаев может стать известным хакеру.
Атаки, осуществляемые с эксплуатацией серверных скриптов, воздействуют прежде всего на сам сервер, но не на клиентскую систему. Например, скрипт PHF, который распространялся с ранними версиями сервера NCSA и Apache I.O.3. Проблема была в том, что он неправильно работал с данными пользовательского ввода (PHF - это скрипт телефонной книги). Если пользователь вводил символ новой строки %0а, то вслед за этим символом скрипт воспринимал системные команды и исполнял их с привилегиями пользователя, от чьего имени был запущен Web-сервер. Стоит ли говорить, насколько серьезна эта уязвимость.
Перед использованием скриптов на сайте очень важно проверить и протестировать все задействованные функции. При этом лучше воспользоваться тестовым сервером, сконфигурированным аналогично работающему в Internet.