Spec-Zone .ru
спецификации, руководства, описания, API
Содержание документации

Полномочия в Java™ SE 7 Комплектов разработчика (JDK)

Разрешение представляет доступ к системному ресурсу. Для доступа ресурса, который будет позволен для апплета (или приложение, работающее с менеджером безопасности), соответствующее разрешение нужно явно предоставить коду, делая попытку доступа.

У разрешения обычно есть имя (часто называемый "целевым именем") и, в некоторых случаях, список разделенных запятой значений одного или более действий. Например, следующий код создает объект FilePermission, представляющий доступ для чтения к названному файлу abc в /tmp каталог:

perm = new java.io.FilePermission("/tmp/abc", "read");

В этом целевое имя"/tmp/abc"и строка действия"read".

Важное Примечание: вышеупомянутый оператор создает объект полномочий. Объект полномочий представляет, но не предоставляет доступ к, системный ресурс. Объекты полномочий создаются и присваиваются ("предоставленные") кодировать основанный на политике в действительности. Когда объект полномочий присваивается некоторому коду, тому коду предоставляют разрешение, чтобы получить доступ к системному ресурсу, определенному в объекте полномочий указанным способом. Объект полномочий может также быть создан текущим менеджером безопасности, делая решения о предоставлении доступа. В этом случае (целевой) объект полномочий создается основанный на запрошенном доступе, и проверял по объектам полномочий, предоставленным, и содержал кодом, обращающимся с просьбой.

Политика для среды приложения Java представляется объектом Политики. В "JavaPolicy" Реализация политики, политика может быть определена в пределах одного или более конфигурационных файлов политики. Файл (ы) политики определяет то, что полномочия позволяются для кода из указанных источников кода. Демонстрационная запись файла политики, которая предоставляет код от /home/sysadmin доступ для чтения каталога к файлу /tmp/abc

grant codeBase "file:/home/sysadmin/" {
    permission java.io.FilePermission "/tmp/abc", "read";
};

Для получения информации о расположении файлов политики и предоставлении полномочий в файлах политики, см. Синтаксис Файла Реализации и Политики Политики Значения по умолчанию. Для получения информации об использовании Средства осуществления политики, чтобы определить полномочия, см. документацию Средства осуществления политики (для Соляриса) (для Windows). Используя Средство осуществления политики сохраняет ввод и избавляет от необходимости Вас знать необходимый синтаксис файлов политики.

Технически, всякий раз, когда доступ ресурса предпринимается, у всего кода, пересеченного потоком выполнения до той точки, должно быть разрешение для того доступа ресурса, если некоторый код потока не был отмечен как "привилегированный". См. API для Привилегированных Блоков для получения дополнительной информации о "привилегированном" коде.

Этот документ содержит таблицы, которые описывают встроенные типы полномочий JDK и обсуждают риски предоставления каждого разрешения. Это также содержит таблицы, показывая методы, которые требуют, чтобы полномочия, чтобы быть в действительности в порядке, чтобы быть успешными, и для каждого перечислили необходимое разрешение.

Следующие темы затрагиваются:

Для получения дополнительной информации о полномочиях, включая суперклассы java.security.Permission и java.security.BasicPermission, и примеры создания объектов полномочий и предоставления полномочий, см. Спецификацию Архитектуры безопасности.


Описания разрешения и Риски

Следующие таблицы описывают встроенные типы полномочий JDK и обсуждают риски предоставления каждого разрешения.

AllPermission

java.security.AllPermission разрешение, которое подразумевает все другие полномочия.

Отметьте: Предоставление AllPermission должен быть сделан с большой осторожностью, поскольку это подразумевает все другие полномочия. Таким образом это предоставляет коду возможность работать с отключенной безопасностью. Экстремальное предостережение должно быть взято прежде, чем предоставить, что такое разрешение кодирует. Это разрешение должно использоваться только во время тестирования, или в чрезвычайно редких случаях, где приложению или апплету полностью доверяют и добавление, что необходимые полномочия к политике являются предельно громоздкими.

SecurityPermission

A java.security.SecurityPermission для прав доступа. A SecurityPermission содержит имя (также называемый "целевым именем"), но никакой список действий; у Вас или есть именованное разрешение, или Вы не делаете.

Целевое имя является именем параметра конфигурации безопасности (см. ниже). В настоящий момент SecurityPermission объект используется, чтобы охранять доступ к Policy, Security, Provider, Signer, и Identity объекты.

Следующая таблица приводит все возможное SecurityPermission предназначайтесь для имен, и для каждого обеспечивает описание того, что разрешение позволяет и обсуждение рисков предоставления кода разрешение.

java.security.SecurityPermission
Целевое Имя
Что Позволяет Разрешение Риски Разрешения этого Разрешения
createAccessControlContext Создание AccessControlContext Это позволяет кому-то инстанцировать AccessControlContext с a DomainCombiner. Экстремальная забота должна быть проявлена, предоставляя это разрешение. Вредоносный код мог создать a DomainCombiner это увеличивает набор полномочий, предоставленных кодировать, и даже предоставить код AllPermission.
getDomainCombiner Извлечение AccessControlContext's DomainCombiner Это позволяет кому-то запрашивать политику через вызов getPermissions, который раскрывает, какие полномочия предоставили бы данному CodeSource. В то время как раскрытие политики не ставит под угрозу безопасность системы, это действительно предоставляет вредоносному коду дополнительную информацию, которую это может использовать, чтобы лучше нацелить атаку. Мудро не обнародовать больше информации чем необходимый.
getPolicy Извлечение политики безопасности в масштабе всей системы (определенно, установленного в настоящий момент объекта Политики) Это позволяет кому-то запрашивать политику через getPermissions вызовите, который раскрывает, какие полномочия предоставили бы данному CodeSource. В то время как раскрытие политики не ставит под угрозу безопасность системы, это действительно предоставляет вредоносному коду дополнительную информацию, которую это может использовать, чтобы лучше нацелить атаку. Мудро не обнародовать больше информации чем необходимый.
setPolicy Устанавливая политики безопасности в масштабе всей системы (определенно, объект Политики) Предоставление этого разрешения чрезвычайно опасно, поскольку вредоносный код может предоставить себе все необходимые полномочия, это должно успешно предпринять атаку на системе.
createPolicy.{policy type} Получение экземпляра Политики через Policy.getInstance Предоставление этого разрешения позволяет коду получить объект Политики. Вредоносный код может запросить объект Политики определить то, что полномочия предоставили кодировать кроме себя.
getProperty.{key} Извлечение свойства безопасности с указанным ключом В зависимости от определенного ключа, для которого был предоставлен доступ, у кода может быть доступ к списку поставщиков систем обеспечения безопасности, так же как расположению политики безопасности в масштабе всей системы и пользовательской политики безопасности. в то время как раскрытие этой информации не ставит под угрозу безопасность системы, это действительно предоставляет вредоносному коду дополнительную информацию, которую это может использовать, чтобы лучше нацелить атаку.
setProperty.{key} Установка свойства безопасности с указанным ключом Это могло включать установку поставщика систем обеспечения безопасности или определение расположения политики безопасности в масштабе всей системы. Вредоносный код, у которого есть разрешение, чтобы установить нового поставщика систем обеспечения безопасности, может установить провайдера жулика, который крадет конфиденциальную информацию, такую как криптографические закрытые ключи. Кроме того, вредоносный код с разрешением, чтобы установить расположение политики безопасности в масштабе всей системы может указать на это на политику безопасности, которая предоставляет атакующему все необходимые полномочия, которых требуется, чтобы успешно предпринять атаку на системе.
insertProvider.{provider name} Добавление нового провайдера, с указанным именем Это позволило бы кому-то представлять возможно злонамеренного провайдера (например, тот, который раскрывает закрытые ключи, которые передают ему) как провайдер самого высокого приоритета. Это было бы возможно, потому что объект Безопасности (который управляет установленными провайдерами) в настоящий момент не проверяет целостность или подлинность провайдера прежде, чем присоединить это.
removeProvider.{provider name} Удаление указанного провайдера Это может изменить поведение или отключить выполнение других частей программы. Если провайдер, которого впоследствии требует программа, был удален, выполнение может перестать работать. Кроме того, если удаленного провайдера не будет явно требовать остальная часть программы, но это обычно был бы провайдер, выбранный, когда службу криптографии будут требовать (из-за ее предыдущего порядка в списке провайдеров), то различный провайдер будет выбран вместо этого, или никакой подходящий провайдер не будет найден, таким образом приводя к отказу программы.
clearProviderProperties.{provider name} "Очистка" от Провайдера так, чтобы это больше не содержало свойства, используемые, чтобы искать службы, реализованные провайдером Это отключает поиск служб, реализованных провайдером. Это может таким образом изменить поведение или отключить выполнение других частей программы, которая обычно использовала бы Провайдера, как описано под "removeProvider. {имя провайдера}" разрешение.
putProviderProperty.{provider name} Установка свойств для указанного Провайдера Свойства провайдера каждый определяет название и местоположение определенной службы, реализованной провайдером. Предоставляя это разрешение, Вы позволяете коду заменять спецификацию службы другим, таким образом определяя различную реализацию.
removeProviderProperty.{provider name} Удаление свойств от указанного Провайдера Это отключает поиск служб, реализованных провайдером. Они больше не доступны из-за удаления свойств, определяющих их названия и местоположение. Это может изменить поведение или отключить выполнение других частей программы, которая обычно использовала бы Провайдера, как описано под "removeProvider. {имя провайдера}" разрешение.

Следующие полномочия связываются с классами, которые были осуждены: Identity, IdentityScope, Signer. Использованию их обескураживают. См. применимые классы для получения дополнительной информации.

java.security.SecurityPermission
Целевое Имя
Что Позволяет Разрешение Риски Разрешения этого Разрешения
setSystemScope Установка системного контекста идентификационных данных Это позволило бы атакующему конфигурировать системный контекст идентификационных данных с сертификатами, которым нельзя доверять, таким образом предоставляя апплет или код программы, подписанный с теми полномочиями сертификатов, которые отрицались бы исходным контекстом идентификационных данных системы.
setIdentityPublicKey Установка открытого ключа для Идентификационных данных Если идентификационные данные отмечаются как "доверяющийся", это позволяет атакующему представлять различный открытый ключ (например, его собственное), которому не доверяет контекст идентификационных данных системы, таким образом предоставляя апплет или код программы, подписанный с тот полномочия с открытым ключом, которые отрицались бы иначе.
setIdentityInfo Установка общей информации представляет в виде строки для Идентификационных данных Это позволяет атакующим устанавливать общее описание для идентификационных данных. Это может обмануть приложения в использование различных идентификационных данных чем предназначенный или может препятствовать тому, чтобы приложения нашли определенные идентификационные данные.
addIdentityCertificate Добавление сертификата для Идентификационных данных Это позволяет атакующим устанавливать сертификат для открытого ключа идентификационных данных. Это опасно, потому что это влияет на доверительные отношения через систему. Этот открытый ключ внезапно становится доверенным более широкой аудитории, чем это иначе было бы.
removeIdentityCertificate Удаление сертификата для Идентификационных данных Это позволяет атакующим удалять сертификат для открытого ключа идентификационных данных. Это опасно, потому что это влияет на доверительные отношения через систему. Этот открытый ключ внезапно становится продуманным менее защищенный, чем это иначе было бы.
printIdentity Просмотр имени принципала и дополнительно контекста, в котором это используется, и считают ли это "доверяемым" в том контексте. Контекст, который распечатывается, может быть именем файла, когда он может передать локальную информацию о системе. Например, вот демонстрационная распечатка идентификационных данных, названных "гимном", кто отмечается не доверяемый базе данных идентификационных данных пользователя:
гимн [/home/luehe/identitydb.obj] [не доверяемый]
getSignerPrivateKey Извлечение закрытого ключа Подписывающего лица Очень опасно предоставить доступ к закрытому ключу; закрытые ключи, как предполагается, держатся в секрете. Иначе, код может использовать закрытый ключ, чтобы подписать различные файлы и утверждать, что подпись прибыла от Подписывающего лица.
setSignerKeyPair Установка пары ключей (и закрытый ключ с открытым ключом) для Подписывающего лица Это позволило бы атакующему заменять чей-либо ("цель") пара ключей с возможно более слабой парой ключей (например, парой ключей меньшего размера ключа). Это также позволило бы атакующему слушать в на зашифрованной передаче между целью и ее коллегами. Коллеги цели могли бы обернуть сеансовый ключ шифрования под "новым" открытым ключом цели, который позволит атакующему (кто обладает соответствующим закрытым ключом) развернуть сеансовый ключ и дешифровать коммуникационные данные, зашифрованные под тем сеансовым ключом.

UnresolvedPermission

java.security.UnresolvedPermission class используется, чтобы содержать Permissions, которые были "неразрешены" когда Policy был инициализирован. Неразрешенное разрешение является тем чей фактический Permission class еще не существует в это время Policy инициализируется (см. ниже).

Политика для Среды выполнения Java (определение, какие полномочия доступны для кода от различных принципалов) представляется a Policy объект. Всякий раз, когда a Policy инициализируется или обновляется, Permission объекты соответствующих классов создаются для всех полномочий, позволенных Policy.

Многие разрешение, типы class, на которые ссылается конфигурация политики, являются, которые существуют локально (то есть, которые могут быть найдены на ПУТИ К КЛАССУ). Во время объектов для таких полномочий можно инстанцировать Policy инициализация. Например, всегда возможно инстанцировать a java.io.FilePermission, начиная с FilePermission class находится на ПУТИ К КЛАССУ.

Другие классы полномочий еще, возможно, не существуют во время Policy инициализация. Например, разрешение, на которое ссылаются, которым class может быть в файле JAR, который будет позже загружен. Для каждого такого class, UnresolvedPermission инстанцируется. Таким образом, UnresolvedPermission по существу "заполнитель", содержащий информацию о разрешении.

Позже, когда код вызывает AccessController.checkPermission на разрешении типа, который был ранее неразрешен, но чей class был с тех пор загружен, "разрешаются" ранее неразрешенные полномочия того типа. Таким образом, для каждого такой UnresolvedPermission, новый объект соответствующего типа class инстанцируют, основан на информации в UnresolvedPermission. Этот новый объект заменяет UnresolvedPermission, который удаляется.

AWTPermission

A java.awt.AWTPermission для полномочий AWT.

Следующая таблица приводит все возможное AWTPermission предназначайтесь для имен, и для каждого обеспечивает описание того, что разрешение позволяет и обсуждение рисков предоставления кода разрешение.

java.awt. AWTPermission
Целевое Имя
Что Позволяет Разрешение Риски Разрешения этого Разрешения
accessClipboard Регистрация и извлечение информации к и от буфера обмена AWT Это позволило бы коду malfeasant совместно использовать потенциально уязвимую информацию или конфиденциальную информацию.
accessEventQueue Доступ к очереди событий AWT После получения очереди событий AWT вредоносный код может посмотреть на и даже удалить существующие события из системы, так же как отправить поддельные события, которые могут целеустремленно заставить приложение или апплет неправильно себя вести небезопасным способом.
accessSystemTray Доступ к экземпляру SystemTray AWT Это позволило бы вредоносному коду добавлять значки лотка к системному лотку. Во-первых, такой значок может быть похожим на значок некоторого известного приложения (такого как брандмауэр или антивирус) и упорядочить пользователя, чтобы сделать что-то опасное (со справкой сообщений воздушного шара). Во-вторых, системный лоток может быть насыщен со значками лотка так, чтобы никто не мог добавить значок лотка больше.
createRobot Создать java.awt.Robot объекты java.awt.Robot объект позволяет коду генерировать мышь на собственном уровне и события клавиатуры так же как читать экран. Это могло позволить вредоносному коду управлять системой, выполнять другие программы, читать дисплей, и отказывать в мыши и доступе клавиатуры к пользователю.
fullScreenExclusive Введите полноэкранный монопольный режим Ввод полноэкранного монопольного режима позволяет прямой доступ к низкоуровневой памяти видеокарты. Это могло использоваться, чтобы имитировать систему, так как программа находится в прямом управлении рендерингом.
listenToAllAWTEvents Слушайте все события AWT в масштабе всей системы После добавления слушателя события AWT вредоносный код может отсканировать все события AWT, диспетчеризированные в системе, позволяя это считать весь ввод данных пользователем (такой как пароли). Каждого слушателя события AWT вызывают изнутри контекста той очереди событий EventDispatchThread, так, если accessEventQueue разрешение также включается, вредоносный код мог бы изменить содержание очередей событий AWT в масштабе всей системы, вызывая приложение или апплет неправильно себя вести небезопасным способом.
readDisplayPixels Readback пикселей от экрана дисплея Интерфейсы такой как java.awt.Composite интерфейс, которые позволяют произвольному коду исследовать пиксели на дисплее, позволяет вредоносному коду шпионить на действиях пользователя.
replaceKeyboardFocusManager Наборы KeyboardFocusManager для определенного потока. Когда SecurityManager устанавливается, потоку вызова нужно предоставить это разрешение, чтобы заменить текущий KeyboardFocusManager. Если разрешение не предоставят, то SecurityException будет брошен.
setAppletStub Установка тупика, который реализует службы контейнера Апплета Вредоносный код мог установить тупик апплета и привести к неожиданному поведению или отказу службы к апплету.
setWindowsAlwaysOnTop Установка поверх остальных окон свойство окна: Window.setAlwaysOnTop(boolean) Злонамеренное окно могло бы заставить себя смотреть и вести себя как реальный полный рабочий стол, так, чтобы информация, вводимая не подозревающим пользователем, была получена и впоследствии неправильно использовалась.
showWindowWithoutWarningBanner Дисплей окна, также не выводя на экран баннер, предупреждающий, что окно создавалось апплетом Без этого предупреждения апплет может раскрыться окна без пользователя, знающего, что они принадлежат апплету. Так как пользователи могут принять чувствительные к безопасности решения, основанные на том, принадлежит ли окно апплету (ввод имени пользователя и пароля в диалоговое окно, например), отключая этот баннер предупреждения может позволить апплетам обманывать пользователя во ввод такой информации.
toolkitModality Создание диалоговых окон TOOLKIT_MODAL и установка свойства окна TOOLKIT_EXCLUDE. Когда модальное инструментарием диалоговое окно показывают от апплета, оно блокирует все другие апплеты в браузере. Когда запускающиеся приложения от Сети Java Запускаются, ее окна (такие как диалоговое окно безопасности) могут также быть блокированы модальными инструментарием диалоговыми окнами, показанными из этих приложений.
watchMousePointer Получение информации о позиции указателя мыши в любое время Постоянно наблюдая указатель мыши, апплет может высказать предположения о том, что пользователь делает, то есть перемещает, мышь к левому нижнему углу экрана наиболее вероятно означает, что пользователь собирается запустить приложение. Если виртуальная клавиатура используется так, чтобы клавиатура была эмулирована, используя мышь, апплет может предположить то, что вводится.

FilePermission

A java.io.FilePermission представляет доступ к файлу или каталогу. A FilePermission состоит из пути и ряда действий, допустимых для того пути.

Путь является путем файла или каталога, предоставленного указанные действия. Путь, который заканчивается в "/*" (где "/" символ разделителя файлов, File.separatorChar) указывает на каталог и все файлы, содержавшиеся в том каталоге. Путь, который заканчивается "/-", указывает на каталог и (рекурсивно) все файлы и подкаталоги, содержавшиеся в том каталоге. Путь, состоящий из специального маркера" <<ВСЕ ФАЙЛЫ>>", соответствует любой файл.

Путь, состоящий из сингла "*", указывает на все файлы в текущем каталоге, в то время как путь, состоящий из сингла "-", указывает на все файлы в текущем каталоге и (рекурсивно) все файлы и подкаталоги, содержавшиеся в текущем каталоге.

Действия, которые будут предоставлены, передают конструктору в строке, содержащей список нуля или более разделенных от запятой ключевых слов. Возможные ключевые слова "читаются", "пишут", "выполняют", и "удаляют". Их значение определяется следующим образом:

Ключевое слово Значение
read Разрешение, чтобы читать.
write Разрешение, чтобы записать (который включает разрешение, чтобы создать).
execute Разрешение, чтобы выполниться. Позволяет Runtime.exec быть вызванным. Соответствует SecurityManager.checkExec.
delete Разрешение, чтобы удалить. Позволяет File.delete быть вызванным. Соответствует SecurityManager.checkDelete.

Строка действий преобразовывается в нижний регистр перед обработкой.

Будьте осторожны, предоставляя FilePermissions. Думайте об импликациях предоставления чтения и особенно доступа для записи к различным файлам и каталогам." <<ВСЕ ФАЙЛЫ>>" разрешение с действием записи особенно опасно. Это предоставляет, что разрешение пишет во всю файловую систему. Одной вещью, которую это эффективно позволяет, является замена системного двоичного файла, включая среду выполнения JVM.

Отметьте: код может всегда читать файл из того же самого каталога, это находится в (или подкаталог того каталога); это не нуждается в явном разрешении, чтобы сделать так.

SerializablePermission

A java.io.SerializablePermission для сериализуемых полномочий. A SerializablePermission содержит имя (также называемый "целевым именем"), но никакой список действий; у Вас или есть именованное разрешение, или Вы не делаете.

Целевое имя является именем Сериализуемого разрешения (см. ниже).

Следующая таблица приводит все возможное SerializablePermission предназначайтесь для имен, и для каждого обеспечивает описание того, что разрешение позволяет и обсуждение рисков предоставления кода разрешение.

java.io.SerializablePermission
Целевое Имя
Что Позволяет Разрешение Риски Разрешения этого Разрешения
enableSubclassImplementation Реализация подкласса ObjectOutputStream или ObjectInputStream переопределять сериализацию значения по умолчанию или десериализацию, соответственно, объектов Код может использовать это, чтобы сериализировать или десериализовать классы в целеустремленно malfeasant способ. Например, во время сериализации, вредоносный код может использовать это, чтобы целеустремленно хранить конфиденциальные частные полевые данные в пути, легкодоступном для атакующих. Или, во время deserializaiton это могло, например, десериализовать class со всеми своими частными полями, обнуленными.
enableSubstitution Замена одного объекта для другого во время сериализации или десериализации Это опасно, потому что вредоносный код может заменить фактический объект тем, у которого есть неправильные или злостные данные.

ReflectPermission

A java.lang.reflect.ReflectPermission для отражающих операций. ReflectPermission является именованным разрешением и не имеет никаких действий. Единственным именем, в настоящий момент определенным, является suppressAccessChecks, который позволяет подавлять стандартные проверки прав доступа языка - для общественности, значение по умолчанию (пакет) доступ, защищенный, и члены парламента, не занимающие официального поста - выполняемый отраженными объектами в их точке использования.

Следующая таблица обеспечивает сводное описание того, что разрешение позволяет, и обсуждает риски предоставления кода разрешение.

java.lang.reflect. ReflectPermission
Целевое Имя
Что Позволяет Разрешение Риски Разрешения этого Разрешения
suppressAccessChecks Предупреждение: Экстремальное предостережение должно быть взято прежде, чем предоставить, что это разрешение кодирует, поскольку это обеспечивает возможность получить доступ к полям и вызвать методы в class. Это включает не только общественность, но и защищенные и частные поля и методы также. Это опасно в той информации (возможно конфиденциальный), и методы, обычно недоступные, были бы доступны для вредоносного кода.

RuntimePermission

A java.lang.RuntimePermission для полномочий времени выполнения. A RuntimePermission содержит имя (также называемый "целевым именем"), но никакой список действий; у Вас или есть именованное разрешение, или Вы не делаете.

Целевое имя является именем разрешения времени выполнения (см. ниже). Соглашение о присвоении имен следует за иерархическим соглашением о присвоении имен свойства. Кроме того, звездочка может появиться в конце имени, после".", или отдельно, чтобы показать подстановочное соответствие. Например:"loadLibrary.*"или"*"допустимо,"*loadLibrary"или"a*b"не допустимо.

Следующая таблица приводит все возможное RuntimePermission предназначайтесь для имен, и для каждого обеспечивает описание того, что разрешение позволяет и обсуждение рисков предоставления кода разрешение.

java.lang. Целевое Имя RuntimePermission Что Позволяет Разрешение Риски Разрешения этого Разрешения
createClassLoader Создание загрузчика class Это - чрезвычайно опасное разрешение, чтобы предоставить. Злонамеренные приложения, которые могут инстанцировать их собственных загрузчиков class, могли тогда загрузить свои собственные классы жулика в систему. Эти недавно загруженные классы могли быть помещены в любой домен защиты загрузчиком class, таким образом автоматически предоставляя классы полномочия для того домена.
getClassLoader Извлечение загрузчика class (например, загрузчика class для вызова class) Это предоставило бы, что разрешение атакующего получает загрузчик class для определенного class. Это опасно, потому что наличие доступа к загрузчику class class позволяет атакующему загружать другие классы, доступные тому загрузчику class. У атакующего обычно иначе не было бы доступа к тем классам.
setContextClassLoader Установка контекста загрузчик class используется потоком Загрузчик class контекста используется системным кодом и расширениями, когда они нуждаются к ресурсам поиска, которые не могли бы существовать в системе загрузчик class. Предоставление setContextClassLoader разрешение позволило бы коду изменяться, какой контекст загрузчик class используется для определенного потока, включая системные потоки.
enableContextClassLoaderOverride Реализация подкласса контекста потока методы загрузчика class Загрузчик class контекста используется системным кодом и расширениями, когда они нуждаются к ресурсам поиска, которые не могли бы существовать в системе загрузчик class. Предоставление enableContextClassLoaderOverride разрешение позволило бы подклассу Потока переопределять методы, которые используются, чтобы получить или установить контекст загрузчик class для определенного потока.
setSecurityManager Установка менеджера безопасности (возможно заменяющий существующий) Менеджером безопасности является class, который позволяет приложениям реализовывать политику безопасности. Предоставление setSecurityManager разрешения позволило бы коду изменяться, какой менеджер безопасности используется, устанавливая различное, возможно менее рестриктивный менеджер безопасности, таким образом обходя проверки, которые были бы осуществлены исходным менеджером безопасности.
createSecurityManager Создание нового менеджера безопасности Это предоставляет доступ кода к защищенным, чувствительным методам, которые могут раскрыть информацию о других классах или стеке выполнения.
getenv.{variable name} Чтение значения указанной переменной окружения Это позволило бы коду читать значение, или определять существование, определенной переменной окружения. Это опасно, если переменная содержит конфиденциальные данные.
exitVM.{exit status} Остановка виртуальной машины Java с указанным статусом выхода Это позволяет атакующему монтировать атаку "отказ в обслуживании", автоматически вынуждая виртуальную машину остановиться. Отметьте: "exitVM. *" разрешение автоматически предоставляют всему коду, загруженному из приложения путь class, таким образом позволяя приложениям завершить себя. Кроме того, "exitVM" разрешение эквивалентно "exitVM. *".
shutdownHooks Регистрация и отмена рычагов завершения работы виртуальной машины Это позволяет атакующему регистрировать злонамеренный рычаг завершения работы, который вмешивается в чистое завершение работы виртуальной машины.
setFactory Установка фабрики сокета, используемой ServerSocket или Сокетом, или потоковой фабрики обработчиков, используется URL Это позволяет коду устанавливать фактическую реализацию для сокета, сокета сервера, потокового обработчика, или фабрики сокета RMI. Атакующий может установить дефектную реализацию, которая искажает поток данных.
setIO Устанавливая System.out, System.in, и System.err Это позволяет изменять значение стандартных системных потоков. Атакующий может изменить System.in, чтобы контролировать и украсть ввод данных пользователем, или может установить System.err в "нулевой" OutputSteam, который скрыл бы любые сообщения об ошибках, отправленные System.err.
modifyThread Модификация потоков, например, через вызовы, чтобы Распараллелить interrupt, stop, suspend, resume, setDaemon, setPriority, setName и setUncaughtExceptionHandler методы Это позволяет атакующему изменять поведение любого потока в системе.
stopThread Остановка потоков через звонки в Поток stop метод Это позволяет коду останавливать любой поток в системе при условии, что этому уже предоставляют разрешение, чтобы получить доступ к тому потоку. Это изображает из себя угрозу, потому что тот код может повредить систему, уничтожая существующие потоки.
modifyThreadGroup Модификация групп потока, например, через звонки в ThreadGroup destroy, getParent, resume, setDaemon, setMaxPriority, stop, и suspend методы Это позволяет атакующему создавать группы потока и устанавливать их приоритет выполнения.
getProtectionDomain Извлечение ProtectionDomain для class Это позволяет коду получать информацию о политике для определенного источника кода. В то время как получение информации о политике не ставит под угрозу безопасность системы, это действительно дает дополнительную информацию атакующих, такую как локальные имена файлов например, чтобы лучше нацелить атаку.
getFileSystemAttributes Извлечение атрибутов файловой системы Это позволяет коду получать информацию о файловой системе, такую как использование диска или дисковое пространство, доступное вызывающей стороне. Это потенциально опасно, потому что это раскрывает информацию о системной аппаратной конфигурации и некоторую информацию о полномочии вызывающей стороны записать файлы.
readFileDescriptor Чтение дескрипторов файлов Это позволило бы коду читать определенный файл, связанный с чтением дескриптора файла. Это опасно, если файл содержит конфиденциальные данные.
writeFileDescriptor Запись в дескрипторы файлов Это позволяет коду писать в определенный файл, связанный с дескриптором. Это опасно, потому что это может позволить коду malicous прививать вирусы или по крайней мере, заполнить Ваш весь диск.
loadLibrary.{library name} Динамическое подключение указанной библиотеки Опасно позволить разрешению апплета загружать библиотеки собственного кода, потому что архитектура безопасности Java не разрабатывается к и не предотвращает злонамеренное поведение на уровне собственного кода.
accessClassInPackage.
{package name}
Доступ к указанному пакету через загрузчик class loadClass метод, когда, что загрузчик class вызывает SecurityManager checkPackageAcesss метод Это предоставляет доступ кода к классам в пакетах, к которым у него обычно нет доступа. Вредоносный код может использовать эти классы, чтобы помочь в его попытке поставить под угрозу безопасность в системе.
defineClassInPackage.
{package name}
Определение классов в указанном пакете, через загрузчик class defineClass метод, когда, что загрузчик class вызывает SecurityManager checkPackageDefinition метод. Это предоставляет, что разрешение кода определяет class в определенном пакете. Это опасно, потому что вредоносный код с этим разрешением может определить классы жулика в доверяемых пакетах как java.security или java.lang, например.
accessDeclaredMembers Предупреждение: Экстремальное предостережение должно быть взято прежде, чем предоставить, что это разрешение кодирует, поскольку это обеспечивает доступ к объявленным элементам class. Это предоставляет, что разрешение кода запрашивает class для своей общественности, защищенной, значение по умолчанию (пакет) доступ, и частные поля и/или методы. Хотя у кода был бы доступ к частным и защищенным именам полей и именам методов, это не будет иметь доступа к частным/защищенным полевым данным и не было бы в состоянии вызвать любые закрытые методы. Однако, вредоносный код может использовать эту информацию, чтобы лучше нацелить атаку. Дополнительно, это может вызвать любые открытые методы и/или поля общественности доступа в class. Это могло быть опасно, если код обычно не будет в состоянии вызвать те методы и/или получить доступ к полям, потому что он не может бросить объект к class / интерфейс с теми методами и полями.
queuePrintJob Инициирование запроса задания печати Это могло напечатать уязвимую информацию к принтеру, или просто макулатуру.
getStackTrace Извлечение трассировочной информации стека другого потока. Это позволяет извлечение трассировочной информации стека другого потока. Это могло бы позволить вредоносному коду контролировать выполнение потоков и обнаруживать уязвимости в приложениях.
setDefaultUncaughtExceptionHandler Установка обработчика значения по умолчанию, который будет использоваться, когда поток завершается резко из-за непойманного исключения. Это позволяет атакующему регистрировать злонамеренный непойманный обработчик исключений, который мог вмешаться в завершение потока.
preferences Представляет разрешение, требуемое получить доступ к java.util.prefs. Привилегированный пользователь реализаций или системный корень, который поочередно позволяет операции извлечения или обновления в пределах Предпочтения персистентное запоминающее устройство. Это разрешение позволяет пользователю читать из или писать в привилегированное запоминающее устройство, если у пользователя, выполняющего код, есть достаточные полномочия ОС к чтению-записи к тому запоминающему устройству. Фактическое запоминающее устройство может находиться в пределах традиционного каталога файловой системы или в пределах реестра в зависимости от платформы ОС.

NIO-связанные Цели

Два NIO-связанный RuntimePermission цели были добавлены в 1.4 выпусках JavaSE JDK:
selectorProvider
charsetProvider
Они RuntimePermissions обязаны быть предоставленными классам, которые разделяют на подклассы и реализуют java.nio.channel.spi.SelectorProvider или java.nio.charset.spi.CharsetProvider. Разрешение проверяется во время вызова абстрактного конструктора class. Эти полномочия гарантируют доверие классам, которые реализуют эти чувствительные к безопасности механизмы провайдера.

См. java.nio.channels.spi.SelectorProvider и java.nio.channels.spi.CharsetProvider для получения дополнительной информации.

NetPermission

A java.net.NetPermission для различных сетевых полномочий. A NetPermission содержит имя, но никакой список действий; у Вас или есть именованное разрешение, или Вы не делаете.

Следующая таблица приводит все возможное NetPermission предназначайтесь для имен, и для каждого обеспечивает описание того, что разрешение позволяет и обсуждение рисков предоставления кода разрешение.

java.net.NetPermission
Целевое Имя
Что Позволяет Разрешение Риски Разрешения этого Разрешения
setDefaultAuthenticator Возможность установить способ, которым получается информация об аутентификации, когда сервер прокси или HTTP просит аутентификацию Вредоносный код может установить аутентификатор, который контролирует и крадет пользовательский ввод аутентификации, поскольку это получает ввод от пользователя.
requestPasswordAuthentication Возможность спросить аутентификатор, зарегистрированный в системе для пароля Вредоносный код может украсть этот пароль.
specifyStreamHandler Возможность определить потоковый обработчик, создавая URL Вредоносный код может создать URL с ресурсами, как которые у него обычно не было бы доступа к (file:/foo/fum/), определяя потоковый обработчик, который получает фактические байты от где-нибудь, у него действительно есть доступ к. Таким образом это могло бы быть в состоянии обмануть систему в создание ProtectionDomain/CodeSource для class даже при том, что, что class действительно не прибывал из того расположения.
setProxySelector Возможность та, установить селектор прокси, используемый, чтобы принять решения, на который прокси использовать, делая сетевые соединения. Вредоносный код может установить ProxySelector, который направляет сетевой трафик к произвольному сетевому узлу.
getProxySelector Возможность та, использовать селектор прокси, чтобы принять решения, на который прокси использовать, делая сетевые соединения. Вредоносный код может заставить ProxySelector обнаруживать узлы прокси и порты на внутренних сетях, которые могли тогда стать целями для атаки.
setCookieHandler Возможность установить обработчик cookie, который обрабатывает чрезвычайно безопасность чувствительная информация о cookie для сеанса Http. Вредоносный код может установить обработчик cookie, чтобы получить доступ к чрезвычайно безопасности чувствительная информация о cookie. Некоторые веб-серверы используют cookie, чтобы спасти пользователя частная информация, такая как информация об управлении доступом, или отследить пользователя, просматривающего привычку.
getCookieHandler Возможность получить обработчик cookie, который обрабатывает чрезвычайно безопасность чувствительная информация о cookie для сеанса Http. Вредоносный код может заставить обработчик cookie получать доступ к чрезвычайно безопасности чувствительная информация о cookie. Некоторые веб-серверы используют cookie, чтобы спасти пользователя частная информация, такая как информация об управлении доступом, или отследить пользователя, просматривающего привычку.
setResponseCache Возможность установить кэш ответа, который обеспечивает доступ к локальному кэшу ответа. Вредоносный код, получающий доступ к локальному кэшу ответа, мог получить доступ к уязвимой информации безопасности, или создать ложные записи в кэше ответа.
getResponseCache Возможность получить кэш ответа, который обеспечивает доступ к локальному кэшу ответа. Вредоносный код, получающий доступ к локальному кэшу ответа, мог получить доступ к уязвимой информации безопасности.

SocketPermission

A java.net.SocketPermission представляет доступ к сети через сокеты. SocketPermission состоит из спецификации узла и ряда "действий", определяющих способы соединиться с тем узлом. Узел определяется как

host = (hostname | IPaddress)[:portrange]
portrange = portnumber | -portnumber | portnumber-[portnumber]

Узел выражается как имя DNS как числовой IP-адрес, или как "localhost" (для локальной машины). Подстановочный знак "*" может быть включен однажды в спецификации узла имени DNS. Если это включается, это должно быть в крайней левой позиции, как в "*.sun.com".

Порт или portrange являются дополнительными. Спецификация порта формы "N-", где N является номером порта, показывает все порты пронумерованный N и выше, в то время как спецификация формы"-N" указывает на все порты пронумерованный N и ниже.

Возможные способы соединиться с узлом

accept
connect
listen
resolve

"Слушать" действие только значимо когда использующийся с "localhost". "Решение" (разрешают host/ip поиски службы имен) действие подразумевается, когда любое из других действий присутствует.

Как пример создания и значения SocketPermissions, отметьте это, если у Вас есть следующая запись в Вашем файле политики:

grant signedBy "mrm" {
    permission java.net.SocketPermission "puffin.example.com:7777", "connect, accept";
};

это заставляет следующий объект полномочий быть сгенерированным и, как предоставлять, кодировать подписанный "mrm".

p1 = new SocketPermission("puffin.example.com:7777", "connect,accept");

p1 представляет разрешение, позволяющее соединения с портом 7777 на puffin.example.com, и также принимая соединения на том порту.

Точно так же, если у Вас есть следующая запись в Вашей политике:

grant signedBy "paul" {
    permission java.net.SocketPermission "localhost:1024-", "accept, connect, listen";
};

это заставляет следующий объект полномочий быть сгенерированным и, как предоставлять, кодировать подписанный "paul".

p2 = new SocketPermission("localhost:1024-", "accept,connect,listen");

p2 представляет принятие разрешения разрешения соединения на, соединение с, или слушание на любом порту между 1024 и 65535 на локальном узле.

Отметьте: Предоставление, что разрешение кода принимает или делает соединения, чтобы отдалить узлы, может быть опасным, потому что злорадный код может тогда более легко передать и совместно использовать конфиденциальные данные среди сторон, у кого, возможно, иначе нет доступа к данным.

SQLPermission

Разрешение то, для который SecurityManager проверит, когда код, который работает в апплете, или приложении с экземпляром SecurityManager включенный, вызовы один из следующих методов:

Если есть нет SQLPermission объект, эти методы бросают a java.lang.SecurityException как исключение на этапе выполнения.

A SQLPermission объект содержит имя (также называемый "целевым именем"), но никакой список действий; есть или именованное разрешение или нет. Целевое имя является именем разрешения (см. следующую таблицу, которая перечисляет все возможное SQLPermission имена). Соглашение о присвоении имен следует за иерархическим соглашением о присвоении имен свойства. Кроме того, звездочка (*) может появиться в конце имени, после точки (.), или отдельно, чтобы показать подстановочное соответствие. Например: loadLibrary.* или * допустимо, но *loadLibrary или a*b не допустимо.

Следующая таблица приводит все возможное SQLPermission целевые имена. Таблица дает описание того, что разрешение позволяет и обсуждение рисков предоставления кода разрешение.

Целевое Имя разрешения Что Позволяет Разрешение Риски Разрешения Этого Разрешения
setLog Установка потока журналирования Это - опасное разрешение, чтобы предоставить. Содержание журнала может содержать имена пользователей и пароли, SQL-операторы, и данные SQL.
callAbort Вызов Connection метод abort Разрешает приложению завершать физическое соединение с базой данных.
setSyncFactory Вызов SyncFactory методы setJNDIContext и setLogger Разрешает приложению определять контекст JNDI от который SyncProvider реализации могут быть получены от и объект журналирования, который будет использоваться SyncProvider реализация.
setNetworkTimeout Вызов Connection метод setNetworkTimeout Разрешает приложению определять максимальный период a Connection или объекты, создаваемые из Connection объект будет ожидать базы данных, чтобы ответить на любой запрос.

Человек, выполняющий апплет, решает, из каких полномочий позволить и выполняет Средство осуществления политики, чтобы создать экземпляр SQLPermission в файле политики. Программист не использует конструктора непосредственно, чтобы создать экземпляр SQLPermission а скорее использует инструмент.

PropertyPermission

A java.util.PropertyPermission для полномочий свойства.

Имя является именем свойства ("java.home", "os.name", и т.д.). Соглашение о присвоении имен следует за иерархическим соглашением о присвоении имен свойства. Кроме того, звездочка может появиться в конце имени, после ".", или отдельно, чтобы показать подстановочное соответствие. Например: "java. *" или "*" допустим, "*java", или "a*b" не допустим.

Действия, которые будут предоставлены, передают конструктору в строке, содержащей список нуля или более разделенных от запятой ключевых слов. Возможные ключевые слова "читаются" и "пишут". Их значение определяется следующим образом:

Ключевое слово Значение
read Разрешение, чтобы читать. Позволяет System.getProperty быть вызванным.
write Разрешение, чтобы записать. Позволяет System.setProperty быть вызванным.

Строка действий преобразовывается в нижний регистр перед обработкой.

Забота должна быть проявлена прежде, чем предоставить, что разрешение кода получает доступ к определенным системным свойствам. Например, предоставление, что разрешение получает доступ к "java.home" системному свойству, дает потенциально злорадную кодозависимую информацию о системной среде (расположение каталога среды выполнения). Кроме того, предоставление, что разрешение получает доступ к "user.name" и "user.home" системным свойствам, дает потенциально злорадную кодозависимую информацию о пользовательской среде (имя учетной записи пользователя и корневой каталог).

LoggingPermission

A SecurityManager проверит java.util.logging.LoggingPermission возразите когда код, работающий с a SecurityManager вызовы один из способов управления журналирования (такой как Logger.setLevel).

В настоящий момент есть только один названный LoggingPermission, "control". control предоставляет возможности управлять конфигурацией журналирования; например, добавляя или удаляя Обработчики, добавляя или удаляя Фильтры, или изменяя журналирование уровней.

Обычно Вы не создаете LoggingPermission объекты непосредственно; вместо этого они создаются кодом политики безопасности, основанным на чтении файла политики безопасности.

SSLPermission

javax.net.ssl.SSLPermission class для различных сетевых полномочий. SSLPermission содержит имя (также называемый "целевым именем"), но никакой список действий; у Вас или есть именованное разрешение, или Вы не делаете.

Целевое имя является именем сетевого разрешения (см. ниже). Соглашение о присвоении имен следует за иерархическим соглашением о присвоении имен свойства. Кроме того, звездочка может появиться в конце имени, после".", или отдельно, чтобы показать подстановочное соответствие. Например:"foo.*"или"*"допустимо,"*foo"или"a*b"не допустимо.

Следующая таблица приводит все возможные целевые имена SSLPermission, и для каждого обеспечивает описание того, что разрешение позволяет и обсуждение рисков предоставления кода разрешение.

Целевое Имя разрешения Что Позволяет Разрешение Риски Разрешения этого Разрешения
setHostnameVerifier Возможность установить обратный вызов, который может решить, позволить ли несоответствие между узлом, соединяемым с HttpsURLConnection и поле общего названия в сертификате сервера. Вредоносный код может установить верификатор, который контролирует имена хоста, которые посещают HttpsURLConnection запросы или это позволяют сертификаты сервера с недопустимыми общими названиями.
getSSLSessionContext Возможность добраться SSLSessionContext из SSLSession. Вредоносный код может контролировать сеансы, которые были установлены с коллегами SSL или могли бы лишить законной силы сеансы, чтобы замедлить производительность.
setDefaultSSLContext Возможность установить контекст SSL значения по умолчанию. Когда приложения используют значение по умолчанию SSLContext, устанавливая контекст SSL значения по умолчанию, вредоносный код может использовать недоказанный доверительный материал, ключевой материальный и случайный генератор, или использовать опасную фабрику сокета SSL и фабрику сокета сервера SSL.

AuthPermission

javax.security.auth.AuthPermission class для полномочий аутентификации. AuthPermission содержит имя (также называемый "целевым именем"), но никакой список действий; у Вас или есть именованное разрешение, или Вы не делаете.

В настоящий момент AuthPermission объект используется, чтобы охранять доступ к Subject, SubjectDomainCombiner, LoginContext и Configuration объекты.

Следующая таблица приводит все возможное AuthPermission предназначайтесь для имен, и для каждого обеспечивает описание того, что разрешение позволяет и обсуждение рисков предоставления кода разрешение.

Целевое Имя разрешения Что Позволяет Разрешение Риски Разрешения этого Разрешения
doAs Вызов Subject.doAs методы Это позволяет приложению вызвать код (Действия) под идентификационными данными любого Subject определенный к doAs метод.
doAsPrivileged Вызов Subject.doAsPrivileged методы Это позволяет приложению вызвать код (Действия) под идентификационными данными любого Subject определенный к doAsPrivileged метод. Дополнительно, вызывающая сторона может удалить себя из стека вызовов (и следовательно из последующих решений безопасности), если это передает null как AccessControlContext.
getSubject Получение Subject от обеспеченного AccessControlContext Это разрешает приложению получать доступ к аутентифицируемому Subject. Приложение может тогда получить доступ к аутентифицируемым Принципалам Предмета и общедоступным учетным данным.
getSubjectFromDomainCombiner Получение Subject от a SubjectDomainCombiner Это разрешает приложению получать доступ к аутентифицируемому Subject связанный с a SubjectDomainCombiner. Приложение может тогда получить доступ к аутентифицируемым Принципалам Предмета и общедоступным учетным данным.
setReadOnly Установка a Subject только для чтения Это разрешает приложению устанавливать Предмет Principal, общедоступные учетные данные и частные учетные наборы, чтобы быть только для чтения. Это может потенциально использоваться в качестве типа атаки "отказ в обслуживании".
modifyPrincipals Сделайте модификации к Предмету Principal набор Решения управления доступом основаны на Принципалах, связанных с a Subject. Это разрешение разрешает приложению делать любые модификации к Предмету Principal набор, таким образом влияя на последующие решения безопасности.
modifyPublicCredentials Сделайте модификации к общедоступному учетному набору Предмета Это разрешение разрешает приложению добавлять или удалять общедоступные учетные данные из a Subject. Это может влиять на код, который полагается на надлежащий набор частных учетных данных, чтобы существовать в этом Subject.
modifyPrivateCredentials Сделайте модификации к частному учетному набору Предмета Это разрешение разрешает приложению добавлять или удалять частные учетные данные из a Subject. Это может влиять на код, который полагается на надлежащий набор частных учетных данных, чтобы существовать в этом Subject.
refreshCredential Обновите учетные данные Object это реализует Refreshable интерфейс Это разрешение разрешает приложению обновлять учетные данные, которые предназначаются, чтобы истечь.
destroyCredential Уничтожьте учетные данные Object это реализует Destroyable интерфейс Это разрешение разрешает приложению потенциально уничтожать учетные данные как атаку "отказ в обслуживании".
createLoginContext.{name} Инстанцируйте a LoginContext с указанным именем В целях безопасности администратор не мог бы хотеть, чтобы приложение было в состоянии аутентифицировать любому LoginModule. Это разрешение разрешает приложению аутентифицировать к LoginModules, сконфигурированному для указанного имени.
getLoginConfiguration Получите вход в систему в масштабе всей системы Configuration Позволяет приложению определять все LoginModules, которые конфигурируются для каждого приложения в системе.
setLoginConfiguration Установите вход в систему в масштабе всей системы Configuration Позволяет приложению конфигурировать LoginModules для каждого приложения в системе.
createLoginConfiguration.{configuration type} Получите объект Конфигурации через Configuration.getInstance Позволяет приложению видеть все LoginModules, которые определяются в конфигурации.
refreshLoginConfiguration Обновите вход в систему в масштабе всей системы Configuration Позволяет приложению обновлять вход в систему Configuration.

PrivateCredentialPermission

javax.security.auth.PrivateCredentialPermission class используется, чтобы защитить доступ к частным Учетным данным, принадлежащим определенному Subject. Subject представляется рядом Принципалов.

Целевое имя этого Permission определяет a Credential Имя class, и ряд Принципалов. Единственное допустимое значение для этого Permission's действия, "читать". Целевое имя должно соблюдать следующий синтаксис:

CredentialClass {PrincipalClass "PrincipalName"}*
Например, следующее разрешение предоставляет доступ к com.sun.PrivateCredential принадлежавший Subjects, у которых есть a com.sun.Principal с именем,"duke".

Отметьте: Хотя этот пример, так же как все примеры ниже, не содержит Codebase, SignedBy, или Principal информация в операторе предоставления (по причинам простоты), фактические конфигурации политики должны определить ту информацию когда приспособлено.

grant {
    permission javax.security.auth.PrivateCredentialPermission
             "com.sun.PrivateCredential com.sun.Principal \"duke\"",
             "read";
};
Если CredentialClass "*", тогда доступ предоставляется всем частным Credentials принадлежащий указанному Subject. Если"PrincipalName*", тогда доступ предоставляется к указанному Credential принадлежавший любому Subject, у которого есть указанный Principal (фактическое PrincipalName не имеет значения). Например, следующее предоставляет доступ к a.b.Credential принадлежавший любому Subject, который имеет a.b.Principal.
grant {
    permission javax.security.auth.PrivateCredentialPermission
             "a.b.Credential a.b.Principal "*"",
             "read";
};
Если оба PrincipalClass и"PrincipalName*", тогда доступ предоставляется к указанному Credential принадлежавший любому Subject. Кроме того, PrincipalClass/PrincipalName соединение может быть повторено:
grant {
    permission javax.security.auth.PrivateCredentialPermission
             "a.b.Credential a.b.Principal "duke" c.d.Principal "dukette"",
             "read";
};
Вышеупомянутый код предоставляет доступ к частному Credential, "a.b.Credential", принадлежа Subject с по крайней мере двумя связанными Principals:"a.b.Principal"с именем,"duke", и"c.d.Principal", с именем,"dukette".

DelegationPermission

javax.security.auth.kerberos.DelegationPermission class используется, чтобы ограничить использование модели делегации Kerberos; то есть, forwardable и proxiable билеты.

Целевое имя этого Разрешения определяет пару kerberos принципалов службы. Первым является зависимый принципал службы, поручаемый, чтобы использовать Билет Выдачи билетов (TGT). Второй принципал службы определяет целевую службу, с которой зависимый принципал службы должен взаимодействовать от имени инициирования KerberosPrincipal. Этот последний принципал службы определяется, чтобы ограничить использование proxiable билета.

Например, чтобы определить использование службы "узла" forwardable TGT, целевое разрешение определяется следующим образом:

DelegationPermission("\"host/foo.example.com@EXAMPLE.COM\" \"krbtgt/EXAMPLE.COM@EXAMPLE.COM\"");
Чтобы дать "резервной" службе proxiable билет службы NFS, целевое разрешение могло бы быть определено:
DelegationPermission("\"backup/bar.example.com@EXAMPLE.COM\" \"nfs/home.EXAMPLE.COM@EXAMPLE.COM\"");

ServicePermission

javax.security.auth.kerberos.ServicePermission class используется, чтобы защитить службы Kerberos и учетные данные, необходимые, чтобы получить доступ к тем службам. Есть один к одному отображению принципала службы и учетных данных, необходимых, чтобы получить доступ к службе. Поэтому предоставление доступа к принципалу службы неявно предоставляет доступ к учетным данным, необходимым, чтобы установить контекст защиты с принципалом службы. Это применяется независимо от того, являются ли учетные данные в кэше или полученный через обмен с KDC. Учетные данные могут быть или билетом выдачи билетов, билетом службы или секретным ключом от ключевой таблицы.

A ServicePermission содержит имя принципала службы и список действий, которые определяют контекст, в пределах которого могут использоваться учетные данные.

Имя принципала службы является каноническим именем KereberosPrincipal, предоставляющего службу, которая является KerberosPrincipal представляет принципал службы Kerberos. Это имя обрабатывается чувствительным к регистру способом.

Предоставление это разрешение подразумевает, что вызывающая сторона может использовать кэшируемые учетные данные (Билет выдачи билетов, билет службы или секретный ключ) в пределах контекста, определяемого действием. В случае TGT, предоставляя это разрешение также подразумевает, что TGT может быть получен Authentication Service обмен.

Возможные действия:

Действие Значение
initiate Позволяет вызывающей стороне использовать учетные данные, чтобы инициировать контекст защиты с принципалом службы.
accept Позволяет вызывающей стороне использовать учетные данные, чтобы принять контекст защиты как определенный принципал.
Например, чтобы определить разрешение к доступу к TGT, чтобы инициировать контекст защиты разрешение создается следующим образом:
     ServicePermission("krbtgt/EXAMPLE.COM@EXAMPLE.COM", "initiate");
Чтобы получить билет службы, чтобы инициировать контекст со службой "узла", разрешение создается следующим образом:
ServicePermission("host/foo.example.com@EXAMPLE.COM", "initiate");
Для сервера Kerberized действие, "принимают". Например, разрешение, необходимое, чтобы получить доступ и использовать секретный ключ службы "узла" Kerberized (telnet и подобные), было бы создано следующим образом:
ServicePermission("host/foo.example.com@EXAMPLE.COM", "accept");

AudioPermission

javax.sound.sampled.AudioPermission class представляет права доступа ресурсам аудиосистемы. AudioPermission содержит целевое имя, но никакой список действий; у Вас или есть именованное разрешение, или Вы не делаете.

Целевое имя является именем аудио разрешения (см. таблицу ниже). Имена следуют за иерархическим соглашением о присвоении имен свойства. Кроме того, звездочка может использоваться, чтобы представить все аудио полномочия.

Следующая таблица приводит возможное AudioPermission целевые имена. Для каждого имени таблица обеспечивает описание точно, что то разрешение позволяет, так же как обсуждение рисков предоставления кода разрешение.

Целевое Имя разрешения Что Позволяет Разрешение Риски Разрешения этого Разрешения
play Воспроизведение аудио через аудиоустройство или устройства на системе. Позволяет приложению получать и управлять строками и микшерами для воспроизведения аудио (рендеринг). В некоторых случаях использование этого разрешения может влиять на другие приложения, потому что аудио от одной строки может быть смешано с другим аудио, играемым на системе, или потому что манипулирование микшером влияет на аудио для всех строк, используя тот микшер.
record Аудиозапись через аудиоустройство или устройства на системе. Позволяет приложению получать и управлять строками и микшерами для аудиозаписи (получение). В некоторых случаях использование этого разрешения может влиять на другие приложения, потому что манипулирование микшером влияет на аудио для всех строк, используя тот микшер. Это разрешение может позволить апплету или приложению подслушать пользователя.

Методы и Полномочия Они Требуют

Следующая таблица содержит список всех методов, которые требуют, чтобы полномочия, и для каждого сказали который SecurityManager метод, который это вызывает и на который проверяется разрешение реализацией по умолчанию этого SecurityManager метод.

Таким образом, со значением по умолчанию SecurityManager реализации метода, звонок в метод в левом столбце может только быть успешным, если разрешение, определенное в соответствующей записи в правом столбце, позволяется политикой в настоящий момент в действительности. Например, следующая строка:

Метод Метод SecurityManager Вызывают Разрешение
java.awt.Toolkit
    getSystemEventQueue();
checkAwtEventQueueAccess java.awt.AWTPermission "accessEventQueue";

определяет что звонок getSystemEventQueue метод в java.awt.Toolkit class приводит к звонку checkAwtEventQueueAccess Метод SecurityManager, который может только быть успешным, если следующее разрешение предоставляют кодировать на стеке вызовов:

  java.awt.AWTPermission "accessEventQueue";

Соглашение:

Метод Метод SecurityManager Вызывают Разрешение
 some.package.class
   public static void someMethod(String foo);
checkXXX SomePermission "{foo}";

означает значение времени выполнения foo заменяет строку {foo} на имя разрешения.

Как пример, вот одна запись таблицы:

Метод Метод SecurityManager Вызывают Разрешение
java.io.FileInputStream
    FileInputStream(String name)
checkRead(String) java.io.FilePermission "{name}", "read";

Если FileInputStream метод (в этом случае, конструктор) вызывают с "/test/MyTestFile" как name параметр, как в

  FileInputStream("/test/MyTestFile");

тогда для вызова, чтобы успешно выполниться, следующее разрешение должно быть установлено в текущей политике, позволяя доступ для чтения к файлу "/test/MyTestFile":

  java.io.FilePermission "/test/MyTestFile", "read";

Более определенно разрешение должно или быть явно установлено, как выше, или подразумеваться другим разрешением, таким как следующее:

  java.io.FilePermission "/test/*", "read";

который позволяет доступ для чтения к любым файлам в "/тест" каталог.

В некоторых случаях термин в фигурных скобках не является точно тем же самым как именем определенного параметра метода, но предназначается, чтобы представить соответствующее значение. Вот пример:

Метод Метод SecurityManager Вызывают Разрешение
java.net.DatagramSocket
  public synchronized void
      receive(DatagramPacket p);
checkAccept({host}, {port}) java.net.SocketPermission "{host}:{port}", "accept";

Здесь, соответствующий узел и значения порта вычисляются receive метод и передал к checkAccept.

В большинстве случаев только имя вызванного метода SecurityManager перечисляется. Где метод является одним из многократных методов того же самого имени, типы параметра также перечисляются, например для checkRead(String) и checkRead(FileDescriptor). В других случаях, где параметры могут быть релевантными, они также перечисляются.

Следующая таблица упорядочивается именем пакета. Таким образом, методы в классах в java.awt пакет перечисляется сначала, сопровождается методами в классах в java.io пакет, и так далее.

Методы и Полномочия Они Требуют
Метод Метод SecurityManager Вызывают Разрешение
java.awt.Graphics2d
  public abstract void
    setComposite(Composite comp)
checkPermission java.awt. AWTPermission "readDisplayPixels", если этот контекст Graphics2D тянет к Компоненту на экране дисплея и Составном объекте, является пользовательским объектом, а не экземпляром AlphaComposite class. Отметьте: setComposite метод фактически абстрактен и таким образом не может вызвать проверки безопасности. Каждая фактическая реализация метода должна вызвать java.lang. SecurityManager checkPermission метод с java.awt. AWTPermission ("readDisplayPixels") разрешение при условиях отмечается.
java.awt.Robot
  public Robot()
  public Robot(GraphicsDevice screen)
checkPermission java.awt. AWTPermission "createRobot"
java.awt.Toolkit
  public void addAWTEventListener(
          AWTEventListener listener,
          long eventMask)
  public void removeAWTEventListener(
     AWTEventListener listener)
checkPermission java.awt. AWTPermission "listenToAllAWTEvents"
java.awt.Toolkit
  public abstract PrintJob getPrintJob(
           Frame frame, String jobtitle,
           Properties props)
checkPrintJobAccess

java.lang. RuntimePermission "queuePrintJob"

Отметьте: getPrintJob метод фактически абстрактен и таким образом не может вызвать проверки безопасности. Каждая фактическая реализация метода должна вызвать java.lang. SecurityManager checkPrintJobAccess метод, который успешен только если java.lang. RuntimePermission "queuePrintJob" разрешение в настоящий момент разрешают.

java.awt.Toolkit
  public abstract Clipboard
                    getSystemClipboard()
checkSystemClipboardAccess

java.awt. AWTPermission "accessClipboard"

Отметьте: getSystemClipboard метод фактически абстрактен и таким образом не может вызвать проверки безопасности. Каждая фактическая реализация метода должна вызвать java.lang. SecurityManager checkSystemClipboardAccess метод, который успешен только если java.awt. AWTPermission "accessClipboard" разрешение в настоящий момент позволяется.

java.awt.Toolkit
  public final EventQueue
               getSystemEventQueue()
checkAwtEventQueueAccess java.awt. AWTPermission "accessEventQueue"
java.awt.Window
  Window()
checkTopLevelWindow Если java.awt. AWTPermission "showWindowWithoutWarningBanner" устанавливается, окно будет выведено на экран без баннера, предупреждающего, что окно создавалось апплетом. Это это не устанавливается, такой баннер, будет выведено на экран.
java.beans.Beans
  public static void setDesignTime(
                 boolean isDesignTime)
  public static void setGuiAvailable(
                 boolean isGuiAvailable)

java.beans.Introspector
  public static synchronized void
    setBeanInfoSearchPath(String path[])

java.beans.PropertyEditorManager
  public static void registerEditor(
                 Class targetType,
                 Class editorClass)
  public static synchronized void
    setEditorSearchPath(String path[])
checkPropertiesAccess java.util. PropertyPermission "*", "чтение, пишут"
java.io.File
  public boolean delete()
  public void deleteOnExit()
checkDelete (Строка) java.io. FilePermission" {имя}", "удаляют"
java.io.FileInputStream
  FileInputStream(FileDescriptor fdObj)
checkRead (FileDescriptor) java.lang. RuntimePermission "readFileDescriptor"
java.io.FileInputStream
  FileInputStream(String name)
  FileInputStream(File file)

java.io.File
  public boolean exists()
  public boolean canRead()
  public boolean isFile()
  public boolean isDirectory()
  public boolean isHidden()
  public long lastModified()
  public long length()
  public String[] list()
  public String[] list(
           FilenameFilter filter)
  public File[] listFiles()
  public File[] listFiles(
           FilenameFilter filter)
  public File[] listFiles(
           FileFilter filter)

java.io.RandomAccessFile
  RandomAccessFile(String name, String mode)
  RandomAccessFile(File file, String mode)
      (where mode is "r" in both of these)
checkRead (Строка) java.io. FilePermission" {имя}", "чтение"
java.io.FileOutputStream
  FileOutputStream(FileDescriptor fdObj)
checkWrite (FileDescriptor) java.lang. RuntimePermission "writeFileDescriptor"
java.io.FileOutputStream
  FileOutputStream(File file)
  FileOutputStream(String name)
  FileOutputStream(String name,
                   boolean append)

java.io.File
  public boolean canWrite()
  public boolean createNewFile()
  public static File createTempFile(
          String prefix, String suffix)
  public static File createTempFile(
          String prefix,  String suffix,
          File directory)
  public boolean mkdir()
  public boolean mkdirs()
  public boolean renameTo(File dest)
  public boolean setLastModified(long time)
  public boolean setReadOnly()
checkWrite (Строка) java.io. FilePermission" {имя}", "запись"
java.io.ObjectInputStream
  protected final boolean
    enableResolveObject(boolean enable);

java.io.ObjectOutputStream
  protected final boolean
    enableReplaceObject(boolean enable)
checkPermission java.io. SerializablePermission "enableSubstitution"
java.io.ObjectInputStream
  protected ObjectInputStream()

java.io.ObjectOutputStream
  protected ObjectOutputStream()
checkPermission java.io. SerializablePermission "enableSubclassImplementation"
java.io.RandomAccessFile
  RandomAccessFile(String name, String mode)
      (where mode is "rw")
checkRead (Строка) и checkWrite (Строка) java.io. FilePermission" {имя}", "чтение, пишут"
java.lang.Class
  public static Class forName(
     String name, boolean initialize,
     ClassLoader loader)
checkPermission Если loader нуль, и загрузчик class вызывающей стороны не является нулем, тогда java.lang. RuntimePermission ("getClassLoader")
java.lang.Class
  public ClassLoader getClassLoader()
checkPermission Если загрузчик class вызывающей стороны является нулем, или является тем же самым как или предок загрузчика class для class, загрузчик class которого требуют, никакое разрешение не необходимо. Иначе,
java.lang. RuntimePermission "getClassLoader"
требуется.
java.lang.Class
  public Class[] getDeclaredClasses()
  public Field[] getDeclaredFields()
  public Method[] getDeclaredMethods()
  public Constructor[]
    getDeclaredConstructors()
  public Field getDeclaredField(
                       String name)
  public Method getDeclaredMethod(...)
  public Constructor
    getDeclaredConstructor(...)
checkMemberAccess (это, Элемент. ОБЪЯВЛЕННЫЙ) и, если этот class находится в пакете, checkPackageAccess ({pkgName}) Значение по умолчанию checkMemberAccess не требует никаких полномочий, если classloader "этого" class является тем же самым как той из вызывающей стороны. Иначе, это требует java.lang. RuntimePermission "accessDeclaredMembers". Если этот class находится в пакете, java.lang. RuntimePermission "accessClassInPackage. {pkgName}" также требуется.
java.lang.Class
  public Class[] getClasses()
  public Field[] getFields()
  public Method[] getMethods()
  public Constructor[] getConstructors()
  public Field getField(String name)
  public Method getMethod(...)
  public Constructor getConstructor(...)
checkMemberAccess (это, Элемент. ОБЩЕСТВЕННОСТЬ) и, если class находится в пакете, checkPackageAccess ({pkgName}) Значение по умолчанию checkMemberAccess не требует никаких полномочий, когда типом доступа является Элемент. ОБЩЕСТВЕННОСТЬ. Если этот class находится в пакете, java.lang. RuntimePermission "accessClassInPackage. {pkgName}" требуется.
java.lang.Class
   public ProtectionDomain
            getProtectionDomain()
checkPermission java.lang. RuntimePermission "getProtectionDomain"
java.lang.ClassLoader
  ClassLoader()
  ClassLoader(ClassLoader parent)
checkCreateClassLoader java.lang. RuntimePermission "createClassLoader"
java.lang.ClassLoader
  public static ClassLoader
           getSystemClassLoader()
  public ClassLoader getParent()
checkPermission Если загрузчик class вызывающей стороны является нулем, или является тем же самым как или предок загрузчика class для class, загрузчик class которого требуют, никакое разрешение не необходимо. Иначе,
java.lang. RuntimePermission "getClassLoader"
требуется.
java.lang.Runtime
  public Process exec(String command)
  public Process exec(String command,
                      String envp[])
  public Process exec(String cmdarray[])
  public Process exec(String cmdarray[],
                      String envp[])
checkExec java.io. FilePermission" {команда}", "выполняются"
java.lang.Runtime
  public void exit(int status)
  public static void
      runFinalizersOnExit(boolean value)
java.lang.System
  public static void exit(int status)
  public static void
      runFinalizersOnExit(boolean value)
checkExit (состояние), где состояние 0 для runFinalizersOnExit java.lang. RuntimePermission "exitVM. {состояние}"
java.lang.Runtime
  public void addShutdownHook(Thread hook)
  public boolean removeShutdownHook(Thread hook)
checkPermission java.lang. RuntimePermission "shutdownHooks"
java.lang.Runtime
  public void load(String lib)
  public void loadLibrary(String lib)
java.lang.System
  public static void load(String filename)
  public static void loadLibrary(
                          String libname)
checkLink ({libName}), где {libName} lib, имя файла или libname параметр java.lang. RuntimePermission "loadLibrary. {libName}"
java.lang.SecurityManager methods
checkPermission См. следующую таблицу.
java.lang.System
  public static Properties
      getProperties()
  public static void
      setProperties(Properties props)
checkPropertiesAccess java.util. PropertyPermission "*", "чтение, пишут"
java.lang.System
  public static String
      getProperty(String key)
  public static String
      getProperty(String key, String def)
checkPropertyAccess java.util. PropertyPermission" {ключ}", "чтение"
java.lang.System
  public static void setIn(InputStream in)
  public static void setOut(PrintStream out)
  public static void setErr(PrintStream err)
checkPermission java.lang. RuntimePermission "setIO"
java.lang.System
  public static String
    setProperty(String key, String value)
checkPermission java.util. PropertyPermission" {ключ}", "запись"
java.lang.System
  public static synchronized void
    setSecurityManager(SecurityManager s)
checkPermission java.lang. RuntimePermission "setSecurityManager"
java.lang.Thread
  public ClassLoader getContextClassLoader()
checkPermission Если загрузчик class вызывающей стороны является нулем, или является тем же самым как или предок контекста загрузчик class для потока, контекст которого загрузчик class требуют, никакое разрешение не необходимо. Иначе,
java.lang. RuntimePermission "getClassLoader"
требуется.
java.lang.Thread
  public void setContextClassLoader
                      (ClassLoader cl)
checkPermission java.lang. RuntimePermission "setContextClassLoader"
java.lang.Thread
  public final void checkAccess()
  public void interrupt()
  public final void suspend()
  public final void resume()
  public final void setPriority
                     (int newPriority)
  public final void setName(String name)
  public final void setDaemon(boolean on)
checkAccess (это) java.lang. RuntimePermission "modifyThread"
java.lang.Thread
  public static int
      enumerate(Thread tarray[])
checkAccess ({threadGroup}) java.lang. RuntimePermission "modifyThreadGroup"
java.lang.Thread
  public final void stop()
checkAccess (это). Также checkPermission, если текущий поток пытается остановить поток кроме себя. java.lang. RuntimePermission "modifyThread".
Также java.lang. RuntimePermission "stopThread", если текущий поток пытается остановить поток кроме себя.
java.lang.Thread
  public final synchronized void
                    stop(Throwable obj)
checkAccess (это). Также checkPermission, если текущий поток пытается остановить поток кроме себя или obj, не является экземпляром ThreadDeath. java.lang. RuntimePermission "modifyThread".
Также java.lang. RuntimePermission "stopThread", если текущий поток пытается остановить поток кроме себя или obj, не является экземпляром ThreadDeath.
java.lang.Thread
  Thread()
  Thread(Runnable target)
  Thread(String name)
  Thread(Runnable target, String name)

java.lang.ThreadGroup
  ThreadGroup(String name)
  ThreadGroup(ThreadGroup parent,
              String name)
checkAccess ({parentThreadGroup}) java.lang. RuntimePermission "modifyThreadGroup"
java.lang.Thread
  Thread(ThreadGroup group, ...)

java.lang.ThreadGroup
  public final void checkAccess()
  public int enumerate(Thread list[])
  public int enumerate(Thread list[],
      boolean recurse)
  public int enumerate(ThreadGroup list[])
  public int enumerate(ThreadGroup list[],
      boolean recurse)
  public final ThreadGroup getParent()
  public final void
      setDaemon(boolean daemon)
  public final void setMaxPriority(int pri)
  public final void suspend()
  public final void resume()
  public final void destroy()
checkAccess (это) для методов ThreadGroup, или checkAccess (группа) для методов Thread java.lang. RuntimePermission "modifyThreadGroup"
java.lang.ThreadGroup
  public final void interrupt()
checkAccess (это) Требует java.lang. RuntimePermission "modifyThreadGroup".
Также требует java.lang. RuntimePermission "modifyThread", начиная с java.lang. Прерывание потока () метод вызывают для каждого потока в группе потока и во всех ее подгруппах. См. прерывание Потока () метод.
java.lang.ThreadGroup
  public final void stop()
checkAccess (это) Требует java.lang. RuntimePermission "modifyThreadGroup".
Также требует java.lang. RuntimePermission "modifyThread" и возможно java.lang. RuntimePermission "stopThread", начиная с java.lang. Остановку потока () метод вызывают для каждого потока в группе потока и во всех ее подгруппах. См., что Поток останавливает () метод.
java.lang.reflect.AccessibleObject
  public static void setAccessible(...)
  public void setAccessible(...)
checkPermission java.lang.reflect. ReflectPermission "suppressAccessChecks"
java.net.Authenticator
  public static PasswordAuthentication
       requestPasswordAuthentication(
             InetAddress addr,
             int port,
             String protocol,
             String prompt,
             String scheme)
checkPermission java.net. NetPermission "requestPasswordAuthentication"
java.net.Authenticator
  public static void
      setDefault(Authenticator a)
checkPermission java.net. NetPermission "setDefaultAuthenticator"
java.net.MulticastSocket
  public void
      joinGroup(InetAddress mcastaddr)
  public void
      leaveGroup(InetAddress mcastaddr)
checkMulticast (InetAddress) java.net. SocketPermission (mcastaddr.getHostAddress (), "принимают, соединяются"),
java.net.DatagramSocket
  public void send(DatagramPacket p)
checkMulticast (p.getAddress) или checkConnect (
p.getAddress ().getHostAddress (), p.getPort ())
если (p.getAddress ().isMulticastAddress ()) {
java.net. SocketPermission (
(p.getAddress).getHostAddress (), "принимают, соединяются"),
}
еще {
порт = p.getPort ();
разместите = p.getAddress ().getHostAddress ();
если (порт ==-1) java.net. SocketPermission" {узел}", "решение";
еще java.net. SocketPermission" {узел}: {порт}", "соединяются"
}
java.net.MulticastSocket
  public synchronized void
      send(DatagramPacket p, byte ttl)
checkMulticast (p.getAddress (), ttl) или checkConnect (
p.getAddress ().getHostAddress (), p.getPort ())
если (p.getAddress ().isMulticastAddress ()) {
java.net. SocketPermission (
(p.getAddress).getHostAddress (), "принимают, соединяются"),
}
еще {
порт = p.getPort ();
разместите = p.getAddress ().getHostAddress ();
если (порт ==-1) java.net. SocketPermission" {узел}", "решение";
еще java.net. SocketPermission" {узел}: {порт}", "соединяются"
}
java.net.InetAddress
  public String getHostName()
  public static InetAddress[]
                  getAllByName(String host)
  public static InetAddress getLocalHost()

java.net.DatagramSocket
  public InetAddress getLocalAddress()
checkConnect ({узел},-1) java.net. SocketPermission" {узел}", "решение"
java.net.ServerSocket
  ServerSocket(...)

java.net.DatagramSocket
  DatagramSocket(...)

java.net.MulticastSocket
  MulticastSocket(...)
checkListen ({порт}) если (порт == 0) java.net. SocketPermission "localhost:1024-", "слушайте";
еще java.net. SocketPermission "localhost: {порт}", "слушают"
java.net.ServerSocket
  public Socket accept()
  protected final void implAccept(Socket s)
checkAccept ({узел}, {порт}) java.net. SocketPermission" {узел}: {порт}", "принимают"
java.net.ServerSocket
  public static synchronized void
      setSocketFactory(...)

java.net.Socket
  public static synchronized void
      setSocketImplFactory(...)

java.net.URL
  public static synchronized void
      setURLStreamHandlerFactory(...)

 java.net.URLConnection
   public static synchronized void
      setContentHandlerFactory(...)
   public static void
      setFileNameMap(FileNameMap map)

java.net.HttpURLConnection
   public static void
       setFollowRedirects(boolean set)

java.rmi.activation.ActivationGroup
  public static synchronized
        ActivationGroup createGroup(...)
  public static synchronized void
      setSystem(ActivationSystem system)

java.rmi.server.RMISocketFactory
   public synchronized static void
      setSocketFactory(...)
checkSetFactory java.lang. RuntimePermission "setFactory"
java.net.Socket
  Socket(...)
checkConnect ({узел}, {порт}) java.net. SocketPermission" {узел}: {порт}", "соединяются"
java.net.DatagramSocket
  public synchronized void
      receive(DatagramPacket p)
checkAccept ({узел}, {порт}) java.net. SocketPermission" {узел}: {порт}", "принимают"
java.net.URL
  URL(...)
checkPermission java.net. NetPermission "specifyStreamHandler"
java.net.URLClassLoader
  URLClassLoader(...)
checkCreateClassLoader java.lang. RuntimePermission "createClassLoader"
java.security.AccessControlContext
  public AccessControlContext(AccessControlContext acc,
                                DomainCombiner combiner)
  public DomainCombiner getDomainCombiner()
checkPermission java.security. SecurityPermission "createAccessControlContext"
java.security.Identity
  public void addCertificate(...)
checkSecurityAccess (
"addIdentityCertificate")
java.security. SecurityPermission "addIdentityCertificate"
java.security.Identity
  public void removeCertificate(...)
checkSecurityAccess (
"removeIdentityCertificate")
java.security. SecurityPermission "removeIdentityCertificate"
java.security.Identity
  public void setInfo(String info)
checkSecurityAccess (
"setIdentityInfo")
java.security. SecurityPermission "setIdentityInfo"
java.security.Identity
  public void setPublicKey(PublicKey key)
checkSecurityAccess (
"setIdentityPublicKey")
java.security. SecurityPermission "setIdentityPublicKey"
java.security.Identity
  public String toString(...)
checkSecurityAccess (
"printIdentity")
java.security. SecurityPermission "printIdentity"
java.security.IdentityScope
  protected static void setSystemScope()
checkSecurityAccess (
"setSystemScope")
java.security. SecurityPermission "setSystemScope"
java.security.Permission
  public void checkGuard(Object object)
checkPermission (это) этот Объект полномочий является проверенным разрешением
java.security.Policy
  public static Policy getPolicy()
checkPermission java.security. SecurityPermission "getPolicy"
java.security.Policy
  public static void
      setPolicy(Policy policy)
checkPermission java.security. SecurityPermission "setPolicy"
java.security.Policy
  public static Policy
      getInstance(String type, SpiParameter params)
      getInstance(String type, SpiParameter params, String provider)
      getInstance(String type, SpiParameter params, Provider provider)

checkPermission java.security. SecurityPermission "createPolicy. {тип}"
java.security.Provider
  public synchronized void clear()
checkSecurityAccess (
"clearProviderProperties". + {имя})
java.security. SecurityPermission "clearProviderProperties. {имя}", где имя является именем провайдера.
java.security.Provider
  public synchronized Object
      put(Object key, Object value)
checkSecurityAccess (
"putProviderProperty". + {имя})
java.security. SecurityPermission "putProviderProperty. {имя}", где имя является именем провайдера.
java.security.Provider
  public synchronized Object
      remove(Object key)
checkSecurityAccess (
"removeProviderProperty". + {имя})
java.security. SecurityPermission "removeProviderProperty. {имя}", где имя является именем провайдера.
java.security.SecureClassLoader
  SecureClassLoader(...)
checkCreateClassLoader java.lang. RuntimePermission "createClassLoader"
java.security.Security
  public static void getProperty(String key)
checkPermission java.security. SecurityPermission "getProperty. {ключ}"
java.security.Security
  public static int
      addProvider(Provider provider)
  public static int
      insertProviderAt(Provider provider,
                       int position);
checkSecurityAccess (
"insertProvider". + provider.getName ())
java.security. SecurityPermission "insertProvider. {имя}"
java.security.Security
  public static void
      removeProvider(String name)
checkSecurityAccess (
"removeProvider". + имя)
java.security. SecurityPermission "removeProvider. {имя}"
java.security.Security
  public static void
    setProperty(String key, String datum)
checkSecurityAccess (
"setProperty". + ключ)
java.security. SecurityPermission "setProperty. {ключ}"
java.security.Signer
  public PrivateKey getPrivateKey()
checkSecurityAccess (
"getSignerPrivateKey")
java.security. SecurityPermission "getSignerPrivateKey"
java.security.Signer
  public final void
      setKeyPair(KeyPair pair)
checkSecurityAccess (
"setSignerKeypair")
java.security. SecurityPermission "setSignerKeypair"
java.sql.DriverManager
  public static synchronized void
      setLogWriter(PrintWriter out)
checkPermission java.sql. SQLPermission "setLog"
java.sql.DriverManager
  public static synchronized void
      setLogStream(PrintWriter out)
checkPermission java.sql. SQLPermission "setLog"
java.util.Locale
  public static synchronized void
            setDefault(Locale newLocale)
checkPermission java.util. PropertyPermission "user.language", "записать"
java.util.zip.ZipFile
  ZipFile(String name)
checkRead java.io. FilePermission" {имя}", "чтение"
javax.security.auth.Subject
    public static Subject getSubject(final AccessControlContext acc)
checkPermission javax.security.auth. AuthPermission "getSubject"
javax.security.auth.Subject
    public void setReadOnly()
checkPermission javax.security.auth. AuthPermission "setReadOnly"
javax.security.auth.Subject
    public static Object doAs(final Subject subject,
                                final PrivilegedAction action)
checkPermission javax.security.auth. AuthPermission "doAs"
javax.security.auth.Subject
    public static Object doAs(final Subject subject,
                                final PrivilegedExceptionAction action)
        throws java.security.PrivilegedActionException
checkPermission javax.security.auth. AuthPermission "doAs"
javax.security.auth.Subject
    public static Object doAsPrivileged(final Subject subject,
                                final PrivilegedAction action,
                                final AccessControlContext acc)
checkPermission javax.security.auth. AuthPermission "doAsPrivileged"
javax.security.auth.Subject
    public static Object doAsPrivileged(final Subject subject,
                                final PrivilegedExceptionAction action,
                                final AccessControlContext acc)
        throws java.security.PrivilegedActionException
checkPermission javax.security.auth. AuthPermission "doAsPrivileged"
javax.security.auth.SubjectDomainCombiner
    public Subject getSubject()
checkPermission javax.security.auth. AuthPermission "getSubjectFromDomainCombiner"
javax.security.auth.SubjectDomainCombiner
    public Subject getSubject()
checkPermission javax.security.auth. AuthPermission "getSubjectFromDomainCombiner"
javax.security.auth.login.LoginContext
    public LoginContext(String name)
        throws LoginException
checkPermission javax.security.auth. AuthPermission "createLoginContext. {имя}"
javax.security.auth.login.LoginContext
    public LoginContext(String name,
                        Subject subject)
         throws LoginException
checkPermission javax.security.auth. AuthPermission "createLoginContext. {имя}"
javax.security.auth.login.LoginContext
    public LoginContext(String name,
                        CallbackHandler callbackHandler)
         throws LoginException
checkPermission javax.security.auth. AuthPermission "createLoginContext. {имя}"
javax.security.auth.login.LoginContext
    public LoginContext(String name,
                        Subject subject,
                        CallbackHandler callbackHandler)
         throws LoginException
checkPermission javax.security.auth. AuthPermission "createLoginContext. {имя}"
javax.security.auth.login.Configuration
    public static Configuration getConfiguration()
checkPermission javax.security.auth. AuthPermission "getLoginConfiguration"
javax.security.auth.login.Configuration
    public static void setConfiguration(Configuration configuration)
checkPermission javax.security.auth. AuthPermission "setLoginConfiguration"
javax.security.auth.login.Configuration
    public static void refresh()
checkPermission javax.security.auth. AuthPermission "refreshLoginConfiguration"
javax.security.auth.login.Configuration
  public static Configuration
      getInstance(String type, SpiParameter params)
      getInstance(String type, SpiParameter params, String provider)
      getInstance(String type, SpiParameter params, Provider provider)

checkPermission javax.security.auth. AuthPermission "createLoginConfiguration. {тип}"



java.lang. Проверки Разрешения Метода SecurityManager

Эти табличные шоу, на которые проверяются полномочия реализациями по умолчанию java.lang.SecurityManager методы.

Каждый из указанных check методы вызывают SecurityManager checkPermission метод с указанным разрешением, за исключением checkConnect и checkRead методы, которые берут параметр контекста. Те методы ожидают, что контекст будет AccessControlContext и они вызывают контекст checkPermission метод с указанным разрешением.

Метод Разрешение
общественность освобождает checkAccept (Строковый узел, международный порт); java.net. SocketPermission" {узел}: {порт}", "принимают";
общественность освобождает checkAccess (Распараллельте t); java.lang. RuntimePermission "modifyThread";
общественность освобождает checkAccess (ThreadGroup g); java.lang. RuntimePermission "modifyThreadGroup";
общественность освобождает checkAwtEventQueueAccess (); java.awt. AWTPermission "accessEventQueue";
общественность освобождает checkConnect (Строковый узел, международный порт); если (порт ==-1) java.net. SocketPermission" {узел}", "решение";
еще java.net. SocketPermission" {узел}: {порт}", "соединяются";
общественность освобождает checkConnect (Строковый узел, международный порт, Объектный контекст); если (порт ==-1) java.net. SocketPermission" {узел}", "решение";
еще java.net. SocketPermission" {узел}: {порт}", "соединяются";
общественность освобождает checkCreateClassLoader (); java.lang. RuntimePermission "createClassLoader";
общественность освобождает checkDelete (Строковый файл); java.io. FilePermission" {файл}", "удаляют";
общественность освобождает checkExec (Представьте cmd в виде строки); если cmd является абсолютным путем: java.io. FilePermission" {cmd}", "выполняются";
еще java.io. FilePermission" <<ALL_FILES>>", "выполняются";
общественность освобождает checkExit (международное состояние); java.lang. RuntimePermission "exitVM. {состояние}";
общественность освобождает checkLink (Строковый lib); java.lang. RuntimePermission "loadLibrary. {lib}";
общественность освобождает checkListen (международный порт); если (порт == 0) java.net. SocketPermission "localhost:1024-", "слушайте";
еще java.net. SocketPermission "localhost: {порт}", "слушают";
общественность освобождает checkMemberAccess (Класс clazz, интервал который);
if (which != Member.PUBLIC) {
  if (currentClassLoader() != clazz.getClassLoader()) {
    checkPermission(
      new java.lang.RuntimePermission("accessDeclaredMembers"));
  }
}
общественность освобождает checkMulticast (InetAddress maddr); java.net. SocketPermission (maddr.getHostAddress (), "принимают, соединяются");
общественность освобождает checkMulticast (InetAddress maddr, байт ttl); java.net. SocketPermission (maddr.getHostAddress (), "принимают, соединяются");
общественность освобождает checkPackageAccess (Представьте pkg в виде строки); java.lang. RuntimePermission "accessClassInPackage. {pkg}";
общественность освобождает checkPackageDefinition (Представьте pkg в виде строки); java.lang. RuntimePermission "defineClassInPackage. {pkg}";
общественность освобождает checkPrintJobAccess (); java.lang. RuntimePermission "queuePrintJob";
общественность освобождает checkPropertiesAccess (); java.util. PropertyPermission "*", "чтение, пишут";
общественность освобождает checkPropertyAccess (Представьте ключ в виде строки); java.util. PropertyPermission" {ключ}", "чтение, пишут";
общественность освобождает checkRead (FileDescriptor fd); java.lang. RuntimePermission "readFileDescriptor";
общественность освобождает checkRead (Строковый файл); java.io. FilePermission" {файл}", "чтение";
общественность освобождает checkRead (Строковый файл, Объектный контекст); java.io. FilePermission" {файл}", "чтение";
общественность освобождает checkSecurityAccess (Строковое действие); java.security. SecurityPermission" {действие}";
общественность освобождает checkSetFactory (); java.lang. RuntimePermission "setFactory";
общественность освобождает checkSystemClipboardAccess (); java.awt. AWTPermission "accessClipboard";
общедоступный булев checkTopLevelWindow (Объектное окно); java.awt. AWTPermission "showWindowWithoutWarningBanner";
общественность освобождает checkWrite (FileDescriptor fd); java.lang. RuntimePermission "writeFileDescriptor";
общественность освобождает checkWrite (Строковый файл); java.io. FilePermission" {файл}", "запись";
общедоступный SecurityManager (); java.lang. RuntimePermission "createSecurityManager";

Oracle и/или его филиалы Авторское право © 1993, 2012, Oracle и/или его филиалы. Все права защищены.
Свяжитесь с Нами