it_vse (519823), страница 50
Текст из файла (страница 50)
Позднее связывание представляет серьезное препятствие на путивнешних атак благодаря специальным соглашениям, касающимся выделения памяти для этих ресурсов.5) Автоматическая сборка мусора и неявное управление памятью.В языках С и C++ программист явным образом распределяет память, освобождает ее и следит за всемиуказателями на выделенную память.
Зачастую это усложняет программы и является главнымисточником ошибок и уязвимости к атакам типа "переполнение буфера" (злоумышленник, передавпрограмме слишком большой, не предусмотренный программистом, параметр может вызвать крушениесистемы или выполнение своего кода), нелегальное копирование, захват полномочий. В языке Javaпрограммист не должен явно управлять памятью. Выделение и освобождение памяти выполняютсяавтоматически и корректно. При освобождении неиспользуемой памяти применяется механизм сборкимусора (дефрагментация памяти).6) Классы и методы final.Классы и методы можно объявлять как final, запрещая тем самым создание подклассов и переопределение методов.
Такое объявление препятствует злонамеренному изменению проверенного кода.7) Проверка имен.Классы Java описываются внутри пакетов. Имена классов связаны с названиями пакетов. Пакетыгарантируют, что код, полученный из сети, отличается от локального кода. Принятая библиотекаклассов не может по ошибке или преднамеренно заменить локальные библиотеки проверенных классовили перехватить их права, даже если эти библиотеки имеют одинаковые имена. Это также защищает отнепроверенных, случайных взаимодействий локального и принятого классов.8) Синтаксические конструкции для защищенных потоковых структур данных.Java является многопотоковым языком и обеспечивает защищенный потоковый доступ к структурамданных и объектам.9) Уникальные манипуляторы для объектов.С каждым объектом в языке Java связан уникальный хэш-код (hashcode).
Это означает, что в любоймомент возможен мониторинг состояния Java-программы.10) Безопасность на уровне компиляции Java-кода.Во время компиляции анализируются все механизмы защиты, существующие в синтаксисе языка Java,включая проверку согласованности объявлений private и public, правильности типов и инициализациивсех переменных в соответствии с предопределенными значениями.Составитель: Ляхевич А.Г., 2000 - 2002 годКак уже говорилось, помимо особенностей языка Java, "заставляющих" писать безопасный код, в Javaимеется и встроенная система безопасности, которая состоит из следующих элементов:•ClassLoader (загрузчик классов)•Verifier (верификатор)•SecurityManager (менеджер безопасности)Эта модель известна под названием sandbox (песочница).
Все Java-приложения, загруженные из сети,выполняются "в песочнице", т.е. не имеют полного доступа к ресурсам компьютера (см. "Безопасность Javaапплетов") и контролируются системой безопасности Java.Загрузчик классов определяет, когда и каким образом классы могут быть добавлены вработающую систему и защищает целостность системы, например запрещает загрузку поддельногоменеджера безопасности. Он выполняют две основные функции:- собственно загрузку байт-кода (с локального диска, по сети, из области памяти)- определение пространства имен (namespaces) для различных классов и способов их взаимодействия(отделяя, к примеру, локальные классы от загруженных по сети).Есть два вида загрузчиков - первичный (primordial) и реализованный в виде объекта (Class Loader Object).Первичный существует в единственном экземпляре и является составной частью виртуальной машины.
Онзанимается загрузкой доверенных классов (обычно находящихся на локальном диске). Загрузчик второготипа представляет собой обычный Java-объект. С его помощью можно осуществить загрузку класса по сетилибо динамическое создание класса программой. Алгоритм действий загрузчика обычно выглядит так:1. Определить, не был ли загружен этот класс раньше, и, если да, вернуть его.2. Проконсультироваться с первичным загрузчиком на предмет существования внутреннего класса с этимименем (во избежание подмены внутренних классов Java классами загружаемыми по сети).3. Запросить у менеджера безопасности разрешение на загрузку данного класса.4.
Считать файл класса в виде массива байтов - по сети, с диска и т. п.5. Создать экземпляр класса Class.6. Загрузить другие классы, используемые данным.7. Передать класс верификатору на проверку.Второй рубеж обороны - верификатор, проверяющий загружаемый байт-код на корректность, таккак у нас нет никакой гарантии, что загружаемый код был получен в результате работы компилятора Java, ане подправлен вручную или не сгенерирован специальным «враждебным» компилятором.
После того каккод прошел верификацию, гарантируется, что файл класса имеет корректный формат, параметры всехопераций имеют правильный тип, в коде не происходит некорректных преобразований типов (например,целого числа в указатель), нет нарушений доступа, нет переполнения стека и т. п. Таким образом,проверяется все, что только можно проверить до начала исполнения программы. Верификатор встроен ввиртуальную машину и недоступен из Java-программы.Класс SecurityManager (менеджер безопасности) отвечает за политику безопасности приложения.Он позволяет приложению перед выполнением потенциально опасной операции выяснить, выполняется лиона классом, загруженным первичным загрузчиком, либо с помощью некоторого ClassLoader по сети (к последнему доверия должно быть гораздо меньше).
Далее менеджер безопасности может определить, разрешить ли эту операцию или запретить. Контролируется работа с файлами (создание, удаление, чтение,запись), запуск программ, подключение библиотек DLL, создание входящих и исходящих сетевых соединений, подмена менеджера безопасности и загрузчика классов, обращение к системным ресурсам, к ресурсамвиртуальной машины, защита потоков и групп потоков друг от друга и т.д. Для каждого кода (апплета, Javaпрограммы) имеется возможность установить права доступ и указать, что код, обладающий определеннымиправами доступа, имеет право на определенные действия (например, создание сетевого соединения с другоймашиной). Никакой Java-код не считается безопасным по умолчанию.
Локальный код может быть подвержен тем же проверкам, что и код апплета, хотя, конечно, никто не мешает ослабить этот контроль спомощью настроек. В менеджере безопасности имеется также возможность цифровой подписи классов(аналог сертификатов в ActiveX). На классы подписанные солидной организацией можно не накладыватьстандартные ограничения. В целом, система безопасности (версии JDK 1.1 и 1.2.) представлены ниже:Составитель: Ляхевич А.Г., 2000 - 2002 годСоставитель: Ляхевич А.Г., 2000 - 2002 год7. Интерфейс Java APIJava Application Programming Interface (Интерфейс прикладного программирования), или Java API, — этонабор классов, разработанных компанией Sun для работы с языком Java. Этот интерфейс помогает присоздании собственных классов, апплетов и приложений.
Используя уже готовые классы, можно написатьJava-приложение длиной всего в несколько строк в отличие от сотен программных строк, необходимых длясоздания программы на С. Классы в Java API сгруппированы в пакеты, в которых могут быть по несколькоклассов и интерфейсов. Более того, каждый элемент может также иметь различные свойства, например, поляи/или методы. Ниже перечислены некоторые имеющиеся или разрабатываемые API-интерфейсы:Стандартный Java APIjava.iojava.utiljava.netjava. awtjava. awt.imageJava.appletПакет java.io служит в языке Java стандартной библиотекой ввода/вывода.Пакет java.util главным образом состоит из различных полезных классов, которые трудноотнести к какому-либо другому пакету, например класс Date, облегчающий работу с датами,класс Hashtable, класс stack и др.пакет Java.net предоставляет средства для связи с удаленными ресурсами, для чего можносоздавать сокеты, подключаться к ним или использовать URL-ссылки.
К примеру, припомощи этого пакета можно создать собственные клиентские и/или серверные программы дляпротоколов Telnet, Chat или FTP.Пакет java.awt - оконный пользовательский интерфейс (Abstract Window Toolkit, AWT). В немсодержатся средства, позволяющие создавать мощные, привлекательные и удобныеграфические оконные интерфейсы для апплетов и автономных программ. В этом пакетеимеются интерактивные средства, например, Button и TextFieid, а также класс Graphics,предоставляющий средства для рисования фигур и вывода изображений.В данном пакете содержатся средства для манипулирования с изображениями, получаемымипо сети.Данный класс имеет множество полезных методов, поскольку является основой для всехапплетов и может также при помощи интерфейса Appietcontext предоставлять информацию обокружении апплета.Java Enterprise APIJava Enterprise API обеспечивает взаимодействие с корпоративными базами данных.