Spec-Zone .ru
спецификации, руководства, описания, API
|
Разрешение представляет доступ к системному ресурсу. Для доступа ресурса, который будет позволен для апплета (или приложение, работающее с менеджером безопасности), соответствующее разрешение нужно явно предоставить коду, делая попытку доступа.
У разрешения обычно есть имя (часто называемый "целевым именем") и, в некоторых случаях, список разделенных запятой значений одного или более действий. Например, следующий код создает объект 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.AllPermission
java.security.SecurityPermission
java.security.UnresolvedPermission
java.awt.AWTPermission
java.io.FilePermission
java.io.SerializablePermission
java.lang.reflect.ReflectPermission
java.lang.RuntimePermission
java.net.NetPermission
java.net.SocketPermission
java.sql.SQLPermission
java.util.PropertyPermission
java.util.logging.LoggingPermission
javax.net.ssl.SSLPermission
javax.security.auth.AuthPermission
javax.security.auth.PrivateCredentialPermission
javax.security.auth.kerberos.DelegationPermission
javax.security.auth.kerberos.ServicePermission
javax.sound.sampled.AudioPermission
Для получения дополнительной информации о полномочиях, включая суперклассы 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
класс используется, чтобы содержать Permission
s, которые были "неразрешены" когда Policy
был инициализирован. Неразрешенное разрешение является тем чей фактический Permission
класс еще не существует в это время Policy
инициализируется (см. ниже).
Политика для Среды выполнения Java (определение, какие полномочия доступны для кода от различных принципалов) представляется a Policy
объект. Всякий раз, когда a Policy
инициализируется или обновляется, Permission
объекты соответствующих классов создаются для всех полномочий, позволенных Policy
.
Много типов класса полномочий, на которые ссылается конфигурация политики, являются, которые существуют локально (то есть, которые могут быть найдены на ПУТИ К КЛАССУ). Во время объектов для таких полномочий можно инстанцировать Policy
инициализация. Например, всегда возможно инстанцировать a java.io.FilePermission
, начиная с FilePermission
класс находится на ПУТИ К КЛАССУ.
Другие классы полномочий еще, возможно, не существуют во время Policy
инициализация. Например, класс полномочий, на который ссылаются, может быть в файле JAR, который будет позже загружен. Для каждого такого класса, UnresolvedPermission
инстанцируется. Таким образом, UnresolvedPermission
по существу "заполнитель", содержащий информацию о разрешении.
Позже, когда код вызывает AccessController.checkPermission
на разрешении типа, который был ранее неразрешен, но чей класс был с тех пор загружен, "разрешаются" ранее неразрешенные полномочия того типа. Таким образом, для каждого такой UnresolvedPermission
, новый объект соответствующего типа класса инстанцируют, основан на информации в 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 . |
Строка действий преобразовывается в нижний регистр перед обработкой.
Будьте осторожны, предоставляя FilePermission
s. Думайте об импликациях предоставления чтения и особенно доступа для записи к различным файлам и каталогам." <<ВСЕ ФАЙЛЫ>>" разрешение с действием записи особенно опасно. Это предоставляет, что разрешение пишет во всю файловую систему. Одной вещью, которую это эффективно позволяет, является замена системного двоичного файла, включая среду выполнения JVM.
Отметьте: код может всегда читать файл из того же самого каталога, это находится в (или подкаталог того каталога); это не нуждается в явном разрешении, чтобы сделать так.
SerializablePermission
A java.io.SerializablePermission
для сериализуемых полномочий. A SerializablePermission
содержит имя (также называемый "целевым именем"), но никакой список действий; у Вас или есть именованное разрешение, или Вы не делаете.
Целевое имя является именем Сериализуемого разрешения (см. ниже).
Следующая таблица приводит все возможное SerializablePermission
предназначайтесь для имен, и для каждого обеспечивает описание того, что разрешение позволяет и обсуждение рисков предоставления кода разрешение.
java.io.SerializablePermission Целевое Имя |
Что Позволяет Разрешение | Риски Разрешения этого Разрешения |
---|---|---|
enableSubclassImplementation |
Реализация подкласса ObjectOutputStream или ObjectInputStream переопределять сериализацию по умолчанию или десериализацию, соответственно, объектов |
Код может использовать это, чтобы сериализировать или десериализовать классы в целеустремленно malfeasant способ. Например, во время сериализации, вредоносный код может использовать это, чтобы целеустремленно хранить конфиденциальные частные полевые данные в пути, легкодоступном для атакующих. Или, во время deserializaiton это могло, например, десериализовать класс со всеми своими частными полями, обнуленными. |
enableSubstitution |
Замена одного объекта для другого во время сериализации или десериализации | Это опасно, потому что вредоносный код может заменить фактический объект тем, у которого есть неправильные или злостные данные. |
ReflectPermission
A java.lang.reflect.ReflectPermission
для отражающих операций. ReflectPermission является именованным разрешением и не имеет никаких действий. Единственным именем, в настоящий момент определенным, является suppressAccessChecks, который позволяет подавлять стандартные проверки прав доступа языка - для общественности, значение по умолчанию (пакет) доступ, защищенный, и члены парламента, не занимающие официального поста - выполняемый отраженными объектами в их точке использования.
Следующая таблица обеспечивает сводное описание того, что разрешение позволяет, и обсуждает риски предоставления кода разрешение.
java.lang.reflect. ReflectPermission Целевое Имя |
Что Позволяет Разрешение | Риски Разрешения этого Разрешения |
---|---|---|
suppressAccessChecks |
Предупреждение: Экстремальное предостережение должно быть взято прежде, чем предоставить, что это разрешение кодирует, поскольку это обеспечивает возможность получить доступ к полям и вызвать методы в классе. Это включает не только общественность, но и защищенные и частные поля и методы также. | Это опасно в той информации (возможно конфиденциальный), и методы, обычно недоступные, были бы доступны для вредоносного кода. |
RuntimePermission
A java.lang.RuntimePermission
для полномочий времени выполнения. A RuntimePermission
содержит имя (также называемый "целевым именем"), но никакой список действий; у Вас или есть именованное разрешение, или Вы не делаете.
Целевое имя является именем разрешения времени выполнения (см. ниже). Соглашение о присвоении имен следует за иерархическим соглашением о присвоении имен свойства. Кроме того, звездочка может появиться в конце имени, после".
", или отдельно, чтобы показать подстановочное соответствие. Например:"loadLibrary.*
"или"*
"допустимо,"*loadLibrary
"или"a*b
"не допустимо.
Следующая таблица приводит все возможное RuntimePermission
предназначайтесь для имен, и для каждого обеспечивает описание того, что разрешение позволяет и обсуждение рисков предоставления кода разрешение.
java.lang. Целевое Имя RuntimePermission | Что Позволяет Разрешение | Риски Разрешения этого Разрешения |
---|---|---|
createClassLoader |
Создание загрузчика класса | Это - чрезвычайно опасное разрешение, чтобы предоставить. Злонамеренные приложения, которые могут инстанцировать их собственных загрузчиков класса, могли тогда загрузить свои собственные классы жулика в систему. Эти недавно загруженные классы могли быть помещены в любой домен защиты загрузчиком класса, таким образом автоматически предоставляя классы полномочия для того домена. |
getClassLoader |
Извлечение загрузчика класса (например, загрузчика класса для класса вызова) | Это предоставило бы, что разрешение атакующего получает загрузчик класса для определенного класса. Это опасно, потому что наличие доступа к загрузчику класса класса позволяет атакующему загружать другие классы, доступные тому загрузчику класса. У атакующего обычно иначе не было бы доступа к тем классам. |
setContextClassLoader |
Установка загрузчика класса контекста используется потоком | Загрузчик класса контекста используется системным кодом и расширениями, когда они нуждаются к ресурсам поиска, которые не могли бы существовать в системном загрузчике класса. Предоставление setContextClassLoader разрешение позволило бы коду изменяться, какой загрузчик класса контекста используется для определенного потока, включая системные потоки. |
enableContextClassLoaderOverride |
Реализация подкласса методов загрузчика класса контекста потока | Загрузчик класса контекста используется системным кодом и расширениями, когда они нуждаются к ресурсам поиска, которые не могли бы существовать в системном загрузчике класса. Предоставление enableContextClassLoaderOverride разрешение позволило бы подклассу Потока переопределять методы, которые используются, чтобы получить или установить загрузчик класса контекста для определенного потока. |
setSecurityManager |
Установка менеджера безопасности (возможно заменяющий существующий) | Менеджер безопасности является классом, который позволяет приложениям реализовывать политику безопасности. Предоставление setSecurityManager разрешения позволило бы коду изменяться, какой менеджер безопасности используется, устанавливая различное, возможно менее рестриктивный менеджер безопасности, таким образом обходя проверки, которые были бы осуществлены исходным менеджером безопасности. |
createSecurityManager |
Создание нового менеджера безопасности | Это предоставляет доступ кода к защищенным, чувствительным методам, которые могут раскрыть информацию о других классах или стеке выполнения. |
getenv.{variable name} |
Чтение значения указанной переменной окружения | Это позволило бы коду читать значение, или определять существование, определенной переменной окружения. Это опасно, если переменная содержит конфиденциальные данные. |
exitVM.{exit status} |
Остановка виртуальной машины Java с указанным статусом выхода | Это позволяет атакующему монтировать атаку "отказ в обслуживании", автоматически вынуждая виртуальную машину остановиться. Отметьте: "exitVM. *" разрешение автоматически предоставляют всему коду, загруженному из пути класса приложений, таким образом позволяя приложениям завершить себя. Кроме того, "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 для класса |
Это позволяет коду получать информацию о политике для определенного источника кода. В то время как получение информации о политике не ставит под угрозу безопасность системы, это действительно дает дополнительную информацию атакующих, такую как локальные имена файлов например, чтобы лучше нацелить атаку. |
getFileSystemAttributes |
Извлечение атрибутов файловой системы | Это позволяет коду получать информацию о файловой системе, такую как использование диска или дисковое пространство, доступное вызывающей стороне. Это потенциально опасно, потому что это раскрывает информацию о системной аппаратной конфигурации и некоторую информацию о полномочии вызывающей стороны записать файлы. |
readFileDescriptor |
Чтение дескрипторов файлов | Это позволило бы коду читать определенный файл, связанный с чтением дескриптора файла. Это опасно, если файл содержит конфиденциальные данные. |
writeFileDescriptor |
Запись в дескрипторы файлов | Это позволяет коду писать в определенный файл, связанный с дескриптором. Это опасно, потому что это может позволить коду malicous прививать вирусы или по крайней мере, заполнить Ваш весь диск. |
loadLibrary.{library name} |
Динамическое подключение указанной библиотеки | Опасно позволить разрешению апплета загружать собственные библиотеки кода, потому что архитектура безопасности Java не разрабатывается к и не предотвращает злонамеренное поведение на уровне собственного кода. |
accessClassInPackage. |
Доступ к указанному пакету через загрузчик класса loadClass метод, когда тот загрузчик класса вызывает SecurityManager checkPackageAcesss метод |
Это предоставляет доступ кода к классам в пакетах, к которым у него обычно нет доступа. Вредоносный код может использовать эти классы, чтобы помочь в его попытке поставить под угрозу безопасность в системе. |
defineClassInPackage. |
Определение классов в указанном пакете, через загрузчик класса defineClass метод, когда тот загрузчик класса вызывает SecurityManager checkPackageDefinition метод. |
Это предоставляет, что разрешение кода определяет класс в определенном пакете. Это опасно, потому что вредоносный код с этим разрешением может определить классы жулика в доверяемых пакетах как java.security или java.lang , например. |
accessDeclaredMembers |
Предупреждение: Экстремальное предостережение должно быть взято прежде, чем предоставить, что это разрешение кодирует, поскольку это обеспечивает доступ к объявленным элементам класса. | Это предоставляет, что разрешение кода запрашивает класс для своей общественности, защищенной, значение по умолчанию (пакет) доступ, и частные поля и/или методы. Хотя у кода был бы доступ к частным и защищенным именам полей и именам методов, это не будет иметь доступа к частным/защищенным полевым данным и не было бы в состоянии вызвать любые закрытые методы. Однако, вредоносный код может использовать эту информацию, чтобы лучше нацелить атаку. Дополнительно, это может вызвать любые открытые методы и/или поля общественности доступа в классе. Это могло быть опасно, если код обычно не будет в состоянии вызвать те методы и/или получить доступ к полям, потому что он не может бросить объект к классу/интерфейсу с теми методами и полями. |
queuePrintJob |
Инициирование запроса задания печати | Это могло напечатать уязвимую информацию к принтеру, или просто макулатуру. |
getStackTrace |
Извлечение трассировочной информации стека другого потока. | Это позволяет извлечение трассировочной информации стека другого потока. Это могло бы позволить вредоносному коду контролировать выполнение потоков и обнаруживать уязвимости в приложениях. |
setDefaultUncaughtExceptionHandler |
Установка обработчика по умолчанию, который будет использоваться, когда поток завершается резко из-за непойманного исключения. | Это позволяет атакующему регистрировать злонамеренный непойманный обработчик исключений, который мог вмешаться в завершение потока. |
preferences |
Представляет разрешение, требуемое получить доступ к java.util.prefs. Привилегированный пользователь реализаций или системный корень, который поочередно позволяет операции извлечения или обновления в пределах Предпочтения персистентная внешняя память. | Это разрешение позволяет пользователю читать из или писать в привилегированную внешнюю память, если у пользователя, выполняющего код, есть достаточные полномочия ОС к чтению-записи к той внешней памяти. Фактическая внешняя память может находиться в пределах традиционного каталога файловой системы или в пределах реестра в зависимости от платформы ОС. |
RuntimePermission
цели были добавлены в 1.4 выпусках JavaSE JDK: selectorProvider charsetProviderОни
RuntimePermission
s обязаны быть предоставленными классам, которые разделяют на подклассы и реализуют java.nio.channel.spi.SelectorProvider
или java.nio.charset.spi.CharsetProvider
. Разрешение проверяется во время вызова конструктора абстрактного базового класса. Эти полномочия гарантируют доверие классам, которые реализуют эти чувствительные к безопасности механизмы провайдера. См. 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 для класса даже при том, что тот класс действительно не прибывал из того расположения. |
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
включенный, вызовы один из следующих методов:
java.sql.DriverManager.setLogWriter
java.sql.DriverManager.setLogStream
(осуждаемый)javax.sql.rowset.spi.SyncFactory.setJNDIContext
javax.sql.rowset.spi.SyncFactory.setLogger
java.sql.Connection.setNetworktimeout
java.sql.Connection.abort
Если есть нет 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
SecurityManager
проверит java.util.logging.LoggingPermission
возразите когда код, работающий с a SecurityManager
вызовы один из способов управления журналирования (такой как Logger.setLevel
). В настоящий момент есть только один названный LoggingPermission
, "control
". control
предоставляет возможности управлять конфигурацией журналирования; например, добавляя или удаляя Обработчики, добавляя или удаляя Фильтры, или изменяя журналирование уровней.
Обычно Вы не создаете LoggingPermission
объекты непосредственно; вместо этого они создаются кодом политики безопасности, основанным на чтении файла политики безопасности.
SSLPermission
javax.net.ssl.SSLPermission
класс для различных сетевых полномочий. SSLPermission
содержит имя (также называемый "целевым именем"), но никакой список действий; у Вас или есть именованное разрешение, или Вы не делаете.
Целевое имя является именем сетевого разрешения (см. ниже). Соглашение о присвоении имен следует за иерархическим соглашением о присвоении имен свойства. Кроме того, звездочка может появиться в конце имени, после".
", или отдельно, чтобы показать подстановочное соответствие. Например:"foo.*
"или"*
"допустимо,"*foo
"или"a*b
"не допустимо.
Следующая таблица приводит все возможные целевые имена SSLPermission, и для каждого обеспечивает описание того, что разрешение позволяет и обсуждение рисков предоставления кода разрешение.
Целевое Имя разрешения | Что Позволяет Разрешение | Риски Разрешения этого Разрешения |
---|---|---|
setHostnameVerifier |
Возможность установить обратный вызов, который может решить, позволить ли несоответствие между узлом, соединяемым с HttpsURLConnection и поле общего названия в сертификате сервера. |
Вредоносный код может установить верификатор, который контролирует имена хоста, которые посещают HttpsURLConnection запросы или это позволяют сертификаты сервера с недопустимыми общими названиями. |
getSSLSessionContext |
Возможность добраться SSLSessionContext из SSLSession . |
Вредоносный код может контролировать сеансы, которые были установлены с коллегами SSL или могли бы лишить законной силы сеансы, чтобы замедлить производительность. |
setDefaultSSLContext |
Возможность установить контекст SSL по умолчанию. | Когда приложения используют SSLContext по умолчанию, устанавливая контекст SSL по умолчанию, вредоносный код может использовать недоказанный доверительный материальный, ключевой материальный и случайный генератор, или использовать опасную фабрику сокета SSL и фабрику сокета сервера SSL. |
AuthPermission
javax.security.auth.AuthPermission
класс для полномочий аутентификации. 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
класс используется, чтобы защитить доступ к частным Учетным данным, принадлежащим определенному Subject. Subject представляется рядом Принципалов. Целевое имя этого Permission определяет a Credential
имя класса, и ряд Принципалов. Единственное допустимое значение для этого Permission
's действия, "читать". Целевое имя должно соблюдать следующий синтаксис:
CredentialClass {PrincipalClass "PrincipalName"}*Например, следующее разрешение предоставляет доступ к
com.sun.PrivateCredential
принадлежавший Subject
s, у которых есть a com.sun.Principal
с именем,"duke
". Отметьте: Хотя этот пример, так же как все примеры ниже, не содержит Codebase
, SignedBy
, или Principal
информация в операторе предоставления (по причинам простоты), фактические конфигурации политики должны определить ту информацию когда приспособлено.
grant { permission javax.security.auth.PrivateCredentialPermission "com.sun.PrivateCredential com.sun.Principal \"duke\"", "read"; };Если
CredentialClass
"*
", тогда доступ предоставляется всем частным Credential
s принадлежащий указанному 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 с по крайней мере двумя связанными Principal
s:"a.b.Principal
"с именем,"duke
", и"c.d.Principal
", с именем,"dukette
". DelegationPermission
javax.security.auth.kerberos.DelegationPermission
класс используется, чтобы ограничить использование модели делегации 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
класс используется, чтобы защитить службы Kerberos и учетные данные, необходимые, чтобы получить доступ к тем службам. Есть один к одному отображению принципала службы и учетных данных, необходимых, чтобы получить доступ к службе. Поэтому предоставление доступа к принципалу службы неявно предоставляет доступ к учетным данным, необходимым, чтобы установить контекст защиты с принципалом службы. Это применяется независимо от того, являются ли учетные данные в кэше или полученный через обмен с KDC. Учетные данные могут быть или билетом выдачи билетов, билетом службы или секретным ключом от ключевой таблицы. A ServicePermission
содержит имя принципала службы и список действий, которые определяют контекст, в пределах которого могут использоваться учетные данные.
Имя принципала службы является каноническим именем KereberosPrincipal, предоставляющего службу, которая является KerberosPrincipal
представляет принципал службы Kerberos. Это имя обрабатывается чувствительным к регистру способом.
Предоставление это разрешение подразумевает, что вызывающая сторона может использовать кэшируемые учетные данные (Билет выдачи билетов, билет службы или секретный ключ) в пределах контекста, определяемого действием. В случае TGT, предоставляя это разрешение также подразумевает, что TGT может быть получен Authentication Service
обмен.
Возможные действия:
Действие | Значение |
---|---|
initiate |
Позволяет вызывающей стороне использовать учетные данные, чтобы инициировать контекст защиты с принципалом службы. |
accept |
Позволяет вызывающей стороне использовать учетные данные, чтобы принять контекст защиты как определенный принципал. |
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
класс представляет права доступа ресурсам аудиосистемы. AudioPermission
содержит целевое имя, но никакой список действий; у Вас или есть именованное разрешение, или Вы не делаете.
Целевое имя является именем аудио разрешения (см. таблицу ниже). Имена следуют за иерархическим соглашением о присвоении имен свойства. Кроме того, звездочка может использоваться, чтобы представить все аудио полномочия.
Следующая таблица приводит возможное AudioPermission
целевые имена. Для каждого имени таблица обеспечивает описание точно, что то разрешение позволяет, так же как обсуждение рисков предоставления кода разрешение.
Целевое Имя разрешения | Что Позволяет Разрешение | Риски Разрешения этого Разрешения |
---|---|---|
play |
Воспроизведение аудио через аудио устройство или устройства на системе. Позволяет приложению получать и управлять строками и микшерами для воспроизведения аудио (рендеринг). | В некоторых случаях использование этого разрешения может влиять на другие приложения, потому что аудио от одной строки может быть смешано с другим аудио, играемым на системе, или потому что манипулирование микшером влияет на аудио для всех строк, используя тот микшер. |
record |
Аудиозапись через аудио устройство или устройства на системе. Позволяет приложению получать и управлять строками и микшерами для аудиозаписи (получение). | В некоторых случаях использование этого разрешения может влиять на другие приложения, потому что манипулирование микшером влияет на аудио для всех строк, используя тот микшер. Это разрешение может позволить апплету или приложению подслушать пользователя. |
Следующая таблица содержит список всех методов, которые требуют, чтобы полномочия, и для каждого сказали который SecurityManager
метод, который это вызывает и на который проверяется разрешение реализацией по умолчанию этого SecurityManager
метод.
Таким образом, со значением по умолчанию SecurityManager
реализации метода, звонок в метод в левом столбце может только быть успешным, если разрешение, определенное в соответствующей записи в правом столбце, позволяется политикой в настоящий момент в действительности. Например, следующая строка:
Метод | Метод SecurityManager Вызывают | Разрешение |
---|---|---|
java.awt.Toolkit getSystemEventQueue(); |
checkAwtEventQueueAccess |
java.awt.AWTPermission "accessEventQueue"; |
определяет что звонок getSystemEventQueue
метод в java.awt.Toolkit
класс приводит к звонку 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. Отметьте: 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 нуль, и загрузчик класса вызывающей стороны не является нулем, тогда java.lang. RuntimePermission ("getClassLoader") |
java.lang.Class public ClassLoader getClassLoader() |
checkPermission | Если загрузчик класса вызывающей стороны является нулем, или является тем же самым как или предок загрузчика класса для класса, загрузчик класса которого требуют, никакое разрешение не необходимо. Иначе, 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 (это, Элемент. ОБЪЯВЛЕННЫЙ) и, если этот класс находится в пакете, checkPackageAccess ({pkgName}) | Значение по умолчанию checkMemberAccess не требует никаких полномочий, если classloader "этого" класса является тем же самым как той из вызывающей стороны. Иначе, это требует java.lang. RuntimePermission "accessDeclaredMembers". Если этот класс находится в пакете, 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 (это, Элемент. ОБЩЕСТВЕННОСТЬ) и, если класс находится в пакете, checkPackageAccess ({pkgName}) | Значение по умолчанию checkMemberAccess не требует никаких полномочий, когда типом доступа является Элемент. ОБЩЕСТВЕННОСТЬ. Если этот класс находится в пакете, 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 | Если загрузчик класса вызывающей стороны является нулем, или является тем же самым как или предок загрузчика класса для класса, загрузчик класса которого требуют, никакое разрешение не необходимо. Иначе, 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 | Если загрузчик класса вызывающей стороны является нулем, или является тем же самым как или предок загрузчика класса контекста для потока, загрузчик класса контекста которого требуют, никакое разрешение не необходимо. Иначе, 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
методы.
Каждый из указанных 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"; |