На главную | Содержание | Назад | Вперёд
Наши друзья

 

 

JAVA и БРОУЗЕРЫ

В этой главе я уже говорил о том, что с Java связано много проблем обеспече­ния безопасности. Но прежде, чем мы перейдем к рассмотрению этих проблем, давайте обсудим, как связаны Java и броузер. Итак, как ;t броузер выполняет апплеты Java& Уже говорилось, что для создания Web-страниц разработчики используют HTML. Чтобы поместить апплет Java на HTML-страницу, они ис­пользуют специальный тег — <APPLET>. Встретив его, броузер понимает, что на странице расположен апплет Java. Если в броузер встроена поддержка Java (другими словами, в нем есть виртуальная машина Java), то он загрузит текст апплета. Внутри тега <APPLET> содержится информация об имени апплета, а также о некоторых других установках (например, о размере его окна).
Например, для выполнения апплета Happy можно создать файл Нсрру. HTML в котором будут располагаться следующие строки:
<HTMLXTITLE>Happy Applet</TITLE>
<APE>LET CODE="Happy.class" WIDTH=300 HE IGHT=2 О О X \ APPLETX / HTML>
В этом примере тег <APPLET> указывает на файл класса {Happy.class и размер окна апплета (в пикселах). Несмотря на то, что в этом примере мы использова­ли имя Happy.HTML, можно использовать и другие имена, такие как Example. HTML.
Встретив тег <APPLET>, броузер пошлет серверу запрос на передачу файла класса. После этого сервер перешлет файл класса броузеру, который, получив его,
передаст его виртуальной машине Java. Виртуальная машина Java проверит класс
Java. Если проверка прошла успешно, то она оттранслирует текст апплета и вы­полнит полученную программу в броузере. 13.5. Взаимодействие между броузером, сервером и виртуальной машинбй Java
КОМПОНЕНТЫ JAVA
Итак, загрузив апплет, броузер передает его виртуальной машине Java, которая производит ряд проверок текста апплета. Кроме компилятора виртуального кода, в виртуальную машину Java входят еще несколько компонентов. К ним отно­сятся загрузчик класса апплета (Applet Class Loader), верификатор апплета (Applet Verifier) и диспетчер безопасности апплетов (Applet Security Manager). Все они будут описаны в последующих разделах этой главы. Так как виртуальная машина Java содержит все необходимые компоненты для загрузки, верификации и про­верки файлов, программисту достаточно предоставить ей только файл класса.
ЗАГРУЗЧИК   КЛАССА АППЛЕТА
Загрузчик класса апплета отвечает за размещение апплета в памяти компьютера. Кроме подготовки апплета к выполнению, этот компонент выполняет следую­щие действия:
• Отвечает за иерархию пространства имен Java.
• Гарантирует существование уникального пространства имен для классов, поступивших с локальной файловой системы или сетевого источника.
• Когда броузер загружает апплет, загрузчик класса помещает классы этого апплета в пространство имен, связанное с источником апплета. Таким образом, загрузчик класса отделяет апплеты друг от друга, что позволяет
защитить коробку.
Но прежде, чем загрузчик класса загрузит какой-либо класс, его должен прове­рить верификатор апплета, о котором мы поговорим в одном из следующих раз­делов этой главы.
f ПРОСТРАНСТВА ИМЕН
Пространство имен ----- это область в памяти компьютера, в ко­торой виртуальная машина Java хранит файлы классов. Каж­дому загружаемому классу она присваивает свое пространство имен. После этого загрузчик класса и верификатор проверяют, не пытается ли какой-либо класс выйти за пределы своего пространства имен и попасть в чужое Пространство и не пытается ли класс получить доступ к памяти компьютера. Реализация целостности пространства имен создана в Java не только в целях безопасности. Благодаря этому один класс не может случайно испортить данные других классов. показано, как виртуальная машина Java может поддерживать несколько пространств имен для Web-страницы с несколькими апплетами Java.
ВЕРИФИКАТОР АППЛЕТА
Верификатор апплета является частью системы времени выполнения Java. С его помощью производится проверка апплета на соответствие правилам безопасно­сти Java. Прежде всего верификатор проверяет, соответствует ли файл класса спецификациям языка. При этом не предполагается, что файл класса создан надежным компилятором. Наоборот, верификатор проверяет, не нарушены ли правила типов и ограничения на пространства имен. Кроме того, он производит проверку на предмет того, не использует ли класс некоторые недоработки в средствах безопасности языка. Чтобы верификатор пропустил программу, она должна удовлетворять следующим параметрам:
Программа не может вызвать переполнение стека или выход за его начало.
• Программа должна правильно обращаться ко всем регистрам.
• Все параметры инструкций виртуального кода должны быть корректными.
• Программа не может преобразовывать данные нелегально.
Верификатор апплета проводит проверку этих основных условий безопасности.
Для этого он анализирует инструкции виртуального кода. Кроме того, верифи­катор проверяет формат файла класса и подписи объектов, а также производит
специальный анализ операторов finally, с помощью которых в Java обрабатыва­ются исключения. Для обнаружения и обработки ошибок программисты Java используют конструкцию try-catch-finally. Оператор finally особенно важен, так как содержащиеся в нем операторы выполняются даже в том случае, если про­изошла фатальная ошибка. Web-броузер использует только один загрузчик класса,
который устанавливается при запуске броузера. После запуска броузер не может
расширять, перегружать, игнорировать или замещать загрузчик класса. Аппле-ты не могут создавать или ссылаться на свой собственный загрузчик класса.
Верификатор апплета не зависит от созданных компании Sun спецификаций языка и компилятора Java. Он проверяет только виртуальный код. Виртуальная маши­на Java будет выполнять только тот виртуальный код, который прошел процесс верификации. Для этого виртуальный код должен соответствовать строгим пра­вилам типизации, подписей объектов, формата файлов класса и предсказуемо­сти поведения стека во время выполнения.
ОШИБКА в РЕАЛИЗАЦИИ ВЕРИФИКАТОРА
Группа исследователей  из  Вашингтонского университета, . А включая Эмина Гана Сирера, Сина МакДирмида и профессо-v  ра Брайана Бершада, провела работу по изучению виртуаль­ного кода Java. Эта работа производилась в рамках проекта Kimera Java Security Project. Группа обнаружила ряд недоче­тов в некоторых коммерческих реализациях верификаторов.
Ученые сообщили компании JavaSoft о том, что они обнаружили ошибку в верификаторе, входящем в пакет JDK 1.1.2. Из-за этой ошибки могут вы­полняться апплеты с небезопасными типами (type-unsafe applet), которые могут заниматься поиском строк, хранимых в пространстве адресов роузера Од­нако ученые обнаружили, что этой ошибки нет ни в JDK 1.0.x, ни в броузе­рах компаний Netscape или Microsoft. В связи с этим компания JavaSoft создала «заплатку» и поставляет ее со всеми пакетами JDK начиная с вер­сии 1.1.3. Кроме того, компания-Sun разослала всем, кто приобрел патент на Java, подробное описание ошибки и метод ее устранения.
ДИСПЕТЧЕР БЕЗОПАСНОСТИ АППЛЕТА
Как уже говорилось, апплеты выполняются в рамках достаточно жестких правил безопасности. Диспетчер безопасности апплета — это некоторый механизм, позволяющий заставить апплет выполнять эти правила. Реализованный компа­нией Sun диспетчер безопасности appletviewer расположен в файле Sun.applet.AppletSecurity.Ka^bm броузер может обладать только одним диспет­чером безопасности. Инициализация диспетчера происходит в момент запуска броузера. После своего запуска броузер не может расширять, перегружать, иг­норировать или замещать диспетчер безопасности. Апплеты не могут создавать или ссылаться на свой собственный диспетчер. Но, как будет сказано дальше, работа диспетчера безопасности зависит от происхождения апплета.
ОСНОВНЫЕ    ПРОБЛЕМЫ БЕЗОПАСНОСТИ
Несмотря на реализованную в Java безопасную среду программирования, вам следует узнать и о некоторых ее недостатках. Это поможет избежать в дальнейшем некоторых неприятных ситуаций. Так как виртуальная машина Java интерпре­тирует апплеты Java локально, то этот процесс отнимает достаточно большое количество системных ресурсов. Некоторые некорректно апплеты могут потребовать слишком много ресурсов, занимая при этом почти всю память машины и процессорное время. Из-за этого они остановить работу системы. Чтобы вывести машину из подобного состояния, вам придется перегрузить ее. Именно этого и добиваются так называемые атаки отказа служб.
В ранних реализациях Java (до выхода пакета JDK существовала ошибка,
позволявшая апплету, загруженному расположенным за брандмауэром клиен­том, присоединяться к хосту, расположенному по ту сторону брандмауэра. После этого апплет мог передавать информацию о машине клиента, а не о сервере-посреднике (как предполагал создатель апплета). Эта ошибка могла быть исполь­зована только в очень специфическом типе сетей с брандмауэрами. Она состояла в возможности использования команды getlocalhost (точнее говоря, ее предыдущих реализаций). Благодаря этому апплет мог передать удаленному хосту идентифи­катор машины, что способствовало проведению атаки подмены (9). Каждая реализация Java содержит какую-либо специфическую для нее ошибку верификатора. Из-за этих ошибок апплеты могут удалить файлы с жесткого дис­ка или произвести другие разрушительные действия. Несмотря на появление
программ-решений ошибок, сама природа подобных ошибок заставляет быть
особенно осторожным с незнакомыми апплетами, а также использовать наиболее
новые версии броузеров.
Раньше апплеты Java могли генерировать и выполнять некоторое подобие ма­шинного кода. После того как апплет будет скомпилирован в машинный код, действия апплета выходят из-под контроля средств безопасности. Другими сло­вами апплеты могли выполнять любые операции. Например, они могли прочи­тать, удалить или испортить файлы, расположенные на машине пользователя. Впоследствии компания Sun создала решение и для этой ошибки. Однако если вы используете Netscape Navigator 2.02 или более ранние версии этого броузера, то вам стоит знать о грозящей опасности.
БЕЗОПАСНОСТЬ JAVA
Как уже говорилось, апплеты Java работают по схеме обеспе­чения безопасности, которая называется коробкой. Благода-
Щ ря ей, пользователь может не беспокоиться о том, что какой-либо апплет нанесет вред его машине. Дело в том, что коробка ограничивает доступ апплета к системным ресурсам. На рисун­ке 13.7 показано, какие части компьютера входят в коробку, а какие — нет.
доставляется ограниченный доступ к системным ресурсам. Например, он имеет доступа к жесткому диску, ему не разрешается создавать дополнитель­ные каналы передачи данных или передавать информацию о клиенте. И стан­дартные апплеты Java, и стандартная библиотека Java являются апплетами коробки. Подобные апплеты безопасны: ведь они не могут выйти за пределы
коробки.
Надежным апплетом Java называется тип апплетов, входящих в новую мо­дель Java, о которой будет подробно рассказано далее. Надежный апплет . обладает доступом ко всем ресурсам системы и работает вне коробки. Такие апплеты используются в корпоративных сетях организаций.
того, к ним относятся апплеты, авторы которых создали подпи­си. Как и все программы, надежный апплет выполняется под управлением операционной системы. Другими словами, он может создавать и удалять файлы, открывать каналы передачи данных и т. д. Замечу, что нельзя гаран­тировать безопасность всех надежных
Чтобы объяснить разницу между надежными апплетами и апплетами короб­ки, приведу следующую аналогию. Представим, что вы хотите устроить у себя вечеринку. Однако вы хотите получить гарантию того, что кто-либо из гостей не украдет у вас какой-либо ценный предмет. Модель коробки позво­ляет войти в ваш дом всем Однако все попавшие к будут расположены в части дома (где нет ценных метов). Кроме того, вы запрете все двери и окна, чтобы они не могли по­пасть в остальные помещения. Таким образом, ваши гости даже и не будут догадываться о том, что в доме есть ценные предметы.
С другой стороны, использование метода надежных позволяет шим гостям свободно перемещаться по дому, но при этом в дом могут по­пасть только приглашенные люди. Этот метод, однако, не дает гарантии,
что кто-либо из гостей не стащит бриллиантовое ожерелье или не разобьет
f вазу династии Пэйк. При помощи идентификации можно только гарантиро­вать, что в дом не попадут не приглашенные люди. Но никто не мешает вам пригласить

 

На главную | Содержание | Назад | Вперёд
 
Яндекс.Метрика