Использование маркированных скриптов
Модель безопасности JavaScript для маркированных скриптов базируется на модели безопасности Java для
маркированных объектов. Вы можете маркировать
инлайн-скрипты (те, которые находятся в тэгах
SCRIPT), скрипты в обработчики событий, объекты/entities JavaScript и отдельные JavaScript-файлы.
JavaScript 1.1 и более ранние версии. Маркировка скриптов отсутствует.
Маркированные скрипты. Введение.
Маркированный скрипт запрашивает расширенные привилегии, получая доступ к закрытой информации. Он запрашивает эти привилегии через использование
LiveConnect и
Java-классов, называемых
Java Capabilities API. Эти классы добавляют возможности и уточняют управление, предоставляемое стандартным
Java-классом SecurityManager. Вы можете использовать эти классы для осуществления высокоточного контроля в так называемом
«sandbox/песочном ящике» – термин
Java для жёстких ограничений, в пределах которых код
Java обязан выполняться.
Решения по управлению доступом сводятся к тому, кто и что может делать. В этой модели
principal\принципал представляет «кто»,
target\цель представляет «что», а
privileges\привилегии, ассоциированные с принципалом, представляют авторизацию (или запрет авторизации) принципалу для доступа к специфической цели.
После написания скрипта вы
маркируете его, используя утилиту
Netscape Signing Tool. Эта утилита ассоциирует цифровую подпись со скриптом на HTML-странице. Владельцем это цифровой подписи является определённый принципал (реальный объект, такой как
Netscape или
John Smith). Одна HTML-страница может иметь скрипты, маркированные разными принципалами. Цифровая подпись помещается в
Java Archive (JAR) -файл. Если Вы маркируете инлайн-скрипт, обработчик события или объект JavaScript,
Netscape Signing Tool сохраняет только подпись и идентификатор для скрипта в
JAR-файле. Если вы маркируете JavaScript-файл утилитой
Netscape Signing Tool, она также сохраняет источник в
JAR-файле.
Ассоциированный принципал позволяет пользователю подтверждать правильность сертификата, используемого для маркировки скрипта. Он также позволяет пользователю убедиться, что данный скрипт подделан после маркировки. Пользователь может затем решить, дать ли привилегии на основе проведённой идентификации сертификата пользователя и проверки целостности скрипта.
Запомните, что пользователь может запретить выдачу привилегий, запрошенных вашим скриптом – вы должны создавать ваши скрипты так, чтобы они адекватно реагировали на такую ситуацию.
В этой главе предполагается, что вы знакомы с основными принципами маркировки объектов с использованием
Java Capabilities API и с созданием цифровой подписи. Следующие документы содержать соответствующую информацию по этому вопросу:
- Netscape Object Signing: Establishing Trust for Downloaded Software – обзор маркировки объектов. Разберитесь в этом материале, прежде чем использовать маркировку скриптов.
- Introduction to the Capabilities Classes – детальная информация об использовании Java Capabilities API. Поскольку маркированные скрипты используют этот API для запрашивания привилегий, вам необходимо разобраться в этой информации.
- Java Capabilities API – введение в Java API, используемый для маркировки объектов. Содержится информация о том, где можно ещё прочитать об этом API.
- Signing Software with Netscape Signing Tool 1.1 – описывает использование утилиты Netscape Signing Tool для создания маркированных скриптов.
- Object-Signing Resources – список документов и ресурсов по вопросам маркировки объектов.
SSL-серверы и немаркированные скрипты
Альтернативой маркировке ваших скриптов утилитой
Netscape Signing Tool является обслуживание их
сервером безопасности/secure server. Navigator рассматривает все страницы, обслуживаемые
SSL-сервером, как если бы они были маркированы ключом
public такого сервера. В этом случае вам не нужно маркировать отдельные скрипты.
Если вы имеете
SSL-сервер, то вам будет намного проще организовать работу ваших скриптов как маркированных. Это особенно актуально, если вы динамически генерируете скрипты на вашем сервере и хотите, чтобы они работали как маркированные.
SSL-серверы и немаркированные скрипты
Альтернативой маркировке ваших скриптов утилитой
Netscape Signing Tool является обслуживание их сервером
безопасности/secure server. Navigator рассматривает все страницы, обслуживаемые
SSL-сервером, как если бы они были маркированы ключом
public такого сервера. В этом случае вам не нужно маркировать отдельные скрипты.
Если вы имеете
SSL-сервер, то вам будет намного проще организовать работу ваших скриптов как маркированных. Это особенно актуально, если вы динамически генерируете скрипты на вашем сервере и хотите, чтобы они работали как маркированные.
Принципалы кодовой базы
Как и Java, JavaScript поддерживает
принципалы кодовой базы/codebase principals.
Принципал кодовой базы это
принципал, полученный из источника скрипта, а не при проверке цифровой подписи сертификата. Поскольку
принципалы кодовой базы обеспечивают слабую защиту, они по умолчанию отключены в Navigator'е.
При публикации ваши скрипты не должны полагаться на то, что
принципалы кодовой базы включены. Вы, возможно, захотите включить
принципалы кодовой базы при разработке ваших скриптов, но вы должны
промаркировать их перед публикацией.
Чтобы включить
принципалы кодовой базы, конечные пользователи обязаны добавить соответствующую настройку в файл настроек Navigator'а. Для этого нужно добавить в файл настроек такую строку:
user_pref("signed.applets.codebase_principal_support", true);
Даже если
принципалы кодовой базы отключены, Navigator отслеживает
принципалы кодовой базы для использования при выполнении политики одного источника. Немаркированные скрипты имеют ассоциированный набор
принципалов, куда входит один элемент –
принципал кодовой базы для страницы, содержащей скрипт. Маркированные скрипты также имеют
принципалы кодовой базы в дополнение к более строгим
принципалам сертификата.