Идентифицирование маркированных скриптов
Вы можете маркировать
инлайн-скрипты, скрипты обработчиков событий, JavaScript-файлы и
объекты/entities JavaScript. Вы не можете маркировать URL'ы
javascript. Вы обязаны идентифицировать то, что вы маркируете внутри HTML-файла:
- Для маркировки инлайн-скрипта вы добавляете атрибуты ARCHIVE и ID в тэг SCRIPT того скрипта, который вы хотите маркировать. Если вы не укажете атрибут ARCHIVE, Navigator использует атрибут ARCHIVE из предыдущего скрипта на этой же странице.
- Для маркировки обработчика события Вы добавляете атрибут ID обработчика в тэге, содержащем этот обработчик. Кроме того, HTML-страница обязана содержать также маркированный инлайн-скрипт, предшествующий обработчику события. Этот тэг SCRIPT обязан предоставить атрибут ARCHIVE.
- Для маркировки объекта JavaScript вы специально ничего не делаете с этим объектом. Вместо этого, HTML-страница обязана также содержать маркированный инлайн-скрипт, предшествующий объекту JavaScript. Этот тэг SCRIPT обязан иметь атрибуты ARCHIVE и ID.
- Для маркировки всего JavaScript-файла вы ничего специального с файлом не делаете. Но тэг SCRIPT скрипта, использующего этот файл, обязан содержать атрибут ARCHIVE.
Атрибут ARCHIVE
Все маркированные скрипты (
инлайн-скрипт, обработчик события, файл JavaScript или объект JavaScript) требуют наличия в тэге
SCRIPT атрибута
ARCHIVE, значением которого является имя
JAR-файла, содержащего цифровую подпись. Например, чтобы маркировать JavaScript-файл, вы можете использовать такой тэг:
<SCRIPT ARCHIVE="myArchive.jar" SRC="myJavaScript.js"> </SCRIPT>
Скрипты обработчиков события не специфицируют атрибут
ARCHIVE. Вместо этого обработчику должен предшествовать скрипт, содержащий
ARCHIVE. Например:
<SCRIPT ARCHIVE="myArchive.jar" ID="a">
...
</SCRIPT>
<FORM>
<INPUT TYPE="button" VALUE="OK"
onClick="alert('A signed script')" ID="b">
</FORM>
Если вы специфицируете не более одного JAR-файла, вам нужно специфицировать файл только однократно. Включите атрибут
ARCHIVE в первый скрипт на HTML-странице, и остальные скрипты на странице используют этот же файл. Например:
<SCRIPT ARCHIVE="myArchive.jar" ID="a">
document.write("This script is signed.");
</SCRIPT>
<SCRIPT ID="b">
document.write("This script is signed too.");
</SCRIPT>
Атрибут ID
Все маркированные скрипты (
инлайн-скрипт, обработчик события, файл JavaScript или объект JavaScript) требуют наличия в тэге
SCRIPT атрибута
ARCHIVE, значением которого является имя
JAR-файла, содержащего цифровую подпись. Например, чтобы маркировать JavaScript-файл, вы можете использовать такой тэг:
<SCRIPT ARCHIVE="myArchive.jar" SRC="myJavaScript.js"> </SCRIPT>
Скрипты обработчиков события не специфицируют атрибут
ARCHIVE. Вместо этого обработчику должен предшествовать скрипт, содержащий
ARCHIVE. Например:
<SCRIPT ARCHIVE="myArchive.jar" ID="a">
...
</SCRIPT>
<FORM>
<INPUT TYPE="button" VALUE="OK"
onClick="alert('A signed script')" ID="b">
</FORM>
Если вы специфицируете не более одного
JAR-файла, вам нужно специфицировать файл только однократно. Включите атрибут
ARCHIVE в первый скрипт на HTML-странице, и остальные скрипты на странице используют этот же файл. Например:
<SCRIPT ARCHIVE="myArchive.jar" ID="a">
document.write("This script is signed.");
</SCRIPT>
<SCRIPT ID="b">
document.write("This script is signed too.");
</SCRIPT>
Использование расширенных привилегий
Как и маркированные объекты
Java, маркированные скрипты используют вызовы
Netscape-классов безопасности
Java для запрашивания
расширенных привилегий.
Java-классы расширяются в
Java Capabilities API.
В простейшем случае вы добавляете одну строку кода, запрашивающего разрешение на доступ к определённой цели, представляющей ресурс, доступ к которому вы хотите получить. Например:
netscape.security.PrivilegeManager.enablePrivilege("UniversalSendMail")
Когда скрипт вызывает эту функцию, подпись проверяется и, если подпись верна, даются
расширенные привилегии. Если нужно, диалог выводит информацию об авторе приложения и предоставляет пользователю опцию для разрешения или запрещения
расширенных привилегий.
Привилегии даются только в
области видимости запрашивающей функции и только после того как запрос удовлетворён в этой функции. Эта
область видимости функции включает любые функции, вызываемые запрашивающей функцией. Когда скрипт выходит из запрашивающей функции, привилегии перестают действовать.
Следующий пример демонстрирует это, печатая такой текст:
7: disabled
5: disabled
2: disabled
3: enabled
1: enabled
4: enabled
6: disabled
8: disabled
Функция
g запрашивает
расширенные привилегии, и только команды и функции, которые вызываются после запроса и внутри функции
g, получают
привилегии.
<SCRIPT ARCHIVE="ckHistory.jar" ID="a">
function printEnabled(i) {
if (history[0] == "") {
document.write(i + ": disabled<BR>");
} else {
document.write(i + ": enabled<BR>");
}
}
function f() {
printEnabled(1);
}
function g() {
printEnabled(2);
netscape.security.PrivilegeManager.enablePrivilege(
"UniversalBrowserRead");
printEnabled(3);
f();
printEnabled(4);
}
function h() {
printEnabled(5);
g();
printEnabled(6);
}
printEnabled(7);
h();
printEnabled(8);
</SCRIPT>
Цели/Targets
Типы информации, которую вы можете получить, называются
targets. Они перечислены в таблице.
Target/Цель | Описание |
UniversalBrowserRead | Позволяет читать привилегированные данные из браузера. Это даёт возможность скрипту передавать одну проверку источника всему документу |
UniversalBrowserWrite | Позволяет модифицировать привилегированные данные в браузере. Это даёт возможность скрипту передавать одну проверку источника всему документу |
UniversalBrowserAccess | Позволяет читать и модифицировать привилегированные данные из браузера. Это даёт возможность скрипту передавать одну проверку источника всему документу |
UniversalFileRead | Даёт скрипту возможность читать любой файл на жёстком диске или другом носителе, подключённом к компьютеру |
UniversalPreferencesRead | Даёт скрипту возможность читать настройки, используя метод navigator.preference |
UniversalPreferencesWrite | Даёт скрипту возможность устанавливать настройки, используя метод navigator.preference |
UniversalSendMail | Даёт программе возможность отправлять посту на имя пользователя |
Возможности JavaScript, требующие наличия привилегий
В этом разделе дан список возможностей языка JavaScript, которые требуют расширенных привилегий, и цели, используемые для доступа к каждой возможности. Немаркированные скрипты не могут использовать эти возможности, если конечный пользователь не включил
принципалы кодовой базы.
- Выгрузка файла требует привилегии UniversalFileRead.
- Отправка формы по URL mailto: или news: требует привилегии UniversalSendMail.
- Использование URL about:, отличное от about:blank, требует привилегии UniversalBrowserRead.
- Объект event: установка любого свойства требует привилегии UniversalBrowserWrite.
- Событие DragDrop: получение значения свойства data требует привилегии UniversalBrowserRead
- Объект history: получение значения любого свойства требует привилегии UniversalBrowserRead
- объект navigator:
- Получение значения настройки с использованием метода preference требует привилегии UniversalPreferencesRead
- Установка значения настройки с использованием метода preference требует привилегии UniversalPreferencesWrite
- Объект window: Разрешение на выполнение следующих операций требует привилегии UniversalBrowserWrite
- Добавление и удаление directory bar,location bar, menu bar, personal bar, scroll bar, status bar или toolbar.
- Использование методов из следующей таблицы при указанных обстоятельствах:
enableExternalCapture | Для захвата событий на страницах, загруженных с других серверов. Затем используйте captureEvents |
close | Безусловное закрытие окна браузера |
moveBy | Перемещение окна за пределы экрана |
moveTo | Перемещение окна за пределы экрана |
open |
- Для создания окна размером меньше 100 x 100 пикселов или больше, чем экран может вместить, с использованием innerWidth, innerHeight, outerWidth и outerHeight
- Для перемещения окна за пределы экрана с использованием screenX и screenY
- Для создания окна без строки заголовка с использованием titlebar
- При использования alwaysRaised, alwaysLowered или z-lock для любых установок
|
resizeTo | Для изменения размеров окна на меньшие, чем 100 x 100 пикселов, или на большие, чем экран может вместить |
resizeBy | Для изменения размеров окна на меньшие, чем 100 x 100 пикселов, или на большие, чем экран может вместить |
- Установка следующих свойств при указанных обстоятельствах:
innerWidth | При установке внутренней ширины окна в размеры менее 100 x 100 или более, чем экран может вместить |
innerHeight | При установке внутренней ширины окна в размеры менее 100 x 100 или более, чем экран может вместить |
Пример
В этом скрипте имеется кнопка, которая, когда её нажимают, выводит диалоговое окно
alert, содержащее часть истории URL браузера. Для правильной работы этот скрипт обязан быть маркированным.
<SCRIPT ARCHIVE="myArchive.jar" ID="a">
function getHistory(i) {
return history[i];
}
function getImmediateHistory() {
netscape.security.PrivilegeManager.enablePrivilege(
"UniversalBrowserRead");
return getHistory(1);
}
</SCRIPT>
...
<INPUT TYPE="button" onClick="alert(getImmediateHistory());" ID="b">