Класс SecurityPermission
- Все реализованные интерфейсы:
-
Serializable,Guard
public final class SecurityPermission extends BasicPermission
SecurityPermission содержит имя (также называемое "именем цели"), но не список действий; у вас есть разрешение на указанное имя или нет. Имя цели — это имя параметра конфигурации безопасности (см. ниже). В настоящее время объект SecurityPermission используется для защиты доступа к объектам AccessControlContext, Policy, Provider, Security, Signer и Identity.
В следующей таблице перечислены стандартные имена целей SecurityPermission, и для каждого из них приведено описание того, что разрешает разрешение, и обсуждение рисков предоставления коду этого разрешения.
| Имя цели разрешения | Что разрешает это разрешение | Риски предоставления этого разрешения |
|---|---|---|
| authProvider.{имя поставщика} | Разрешить указанному поставщику быть AuthProvider для операций входа и выхода. | Это позволяет указанному поставщику выполнять операции входа и выхода. Указанный поставщик должен расширять AuthProvider и необходимо соблюдать осторожность при предоставлении его доверенному поставщику, поскольку операции входа включают в себя конфиденциальную информацию об аутентификации, такую как ПИН-коды и пароли. |
| createAccessControlContext | Создание AccessControlContext | Это позволяет кому-либо создать AccessControlContext с DomainCombiner. Необходимо соблюдать крайнюю осторожность при предоставлении этого разрешения. Злонамеренный код может создать DomainCombiner, который расширяет набор разрешений, предоставляемых коду, и даже предоставить коду AllPermission. |
| getDomainCombiner | Получение DomainCombiner AccessControlContext | Это позволяет кому-либо получить DomainCombiner AccessControlContext. Поскольку DomainCombiners могут содержать конфиденциальную информацию, это потенциально может привести к утечке данных. |
| getPolicy | Получение системной политики безопасности (в частности, объекта Policy, установленного в данный момент) | Это позволяет кому-либо запросить политику с помощью вызова getPermissions, который раскрывает, какие разрешения будут предоставлены данному CodeSource. Хотя раскрытие политики не компрометирует безопасность системы, оно предоставляет злонамеренному коду дополнительную информацию, которую он может использовать для более эффективного проведения атаки. Следует избегать раскрытия более информации, чем необходимо. |
| setPolicy | Установка системной политики безопасности (в частности, объекта Policy) | Предоставление этого разрешения чрезвычайно опасно, так как злонамеренный код может предоставить себе все необходимые разрешения, необходимые для успешной атаки на систему. |
| createPolicy.{тип политики} | Получение экземпляра реализации Policy от поставщика | Предоставление этого разрешения позволяет коду получить объект Policy. Злонамеренный код может запросить объект Policy, чтобы определить, какие разрешения были предоставлены коду, кроме самого себя. |
| getProperty.{ключ} | Получение свойства безопасности с заданным ключом | В зависимости от конкретного ключа, для которого предоставлен доступ, код может получить доступ к списку поставщиков безопасности, а также к расположению системной и пользовательской политики безопасности. Хотя раскрытие этой информации не компрометирует безопасность системы, оно предоставляет злонамеренному коду дополнительную информацию, которую он может использовать для более эффективного проведения атаки. |
| setProperty.{ключ} | Установка свойства безопасности с заданным ключом | Это может включать установку поставщика безопасности или определение расположения системной политики безопасности. Злонамеренный код, у которого есть разрешение на установку нового поставщика безопасности, может установить вредоносного поставщика, который крадёт конфиденциальную информацию, такую как закрытые ключи шифрования. Кроме того, злонамеренный код с разрешением на установку расположения системной политики безопасности может направить её на политику безопасности, которая предоставляет злоумышленнику все необходимые разрешения, необходимые для успешной атаки на систему. |
| insertProvider | Добавление нового поставщика | Это позволило бы кому-то ввести потенциально злонамеренного поставщика (например, такого, который раскрывает передаваемые ему закрытые ключи) в качестве поставщика с наивысшим приоритетом. Это стало бы возможным, потому что объект Security (который управляет установленными поставщиками) в настоящее время не проверяет целостность или подлинность поставщика перед его подключением. Разрешение "insertProvider" включает разрешение "insertProvider.{имя поставщика}" (см. раздел ниже для получения дополнительной информации). |
| removeProvider.{имя поставщика} | Удаление указанного поставщика | Это может изменить поведение или отключить выполнение других частей программы. Если поставщик, впоследствии запрошенный программой, был удален, выполнение может завершиться сбоем. Также, если удалённый поставщик не запрашивается остальной частью программы явно, но он обычно выбирался бы, когда запрашивается служба криптографии (из-за его предыдущего порядка в списке поставщиков), вместо этого будет выбран другой поставщик или подходящий поставщик не будет найден, что приведёт к ошибке программы. |
| clearProviderProperties.{имя поставщика} | «Очистка» поставщика, чтобы он больше не содержал свойства, используемые для поиска служб, реализованных поставщиком | Это отключает поиск служб, реализованных поставщиком. Таким образом, это может изменить поведение или отключить выполнение других частей программы, которые обычно используют поставщика, как описано в разрешении «removeProvider.{имя поставщика}». |
| putProviderProperty.{имя поставщика} | Установка свойств для указанного поставщика | Свойства поставщика каждый определяет имя и местоположение конкретной службы, реализованной поставщиком. Предоставляя это разрешение, вы позволяете коду заменить указание службы другим, тем самым указав другую реализацию. |
| removeProviderProperty.{имя поставщика} | Удаление свойств из указанного поставщика | Это отключает поиск служб, реализованных поставщиком. Они больше недоступны из-за удаления свойств, определяющих их имена и местоположения. Это может изменить поведение или отключить выполнение других частей программы, которые обычно используют поставщика, как описано в разрешении «removeProvider.{имя поставщика}». |
Следующие разрешения устарели из-за новых разрешений или связаны с устаревшими классами: Identity, IdentityScope, Signer. Их использование не рекомендуется. См. соответствующие классы для получения дополнительной информации.
| Имя целевого объекта разрешения | Что разрешает это разрешение | Риски, связанные с предоставлением этого разрешения |
|---|---|---|
| insertProvider.{имя поставщика} | Добавление нового поставщика с указанным именем | Использование этого разрешения не рекомендуется из-за возможности обхода ограничений по имени путём переопределения метода Provider.getName(). Кроме того, существует аналогичный уровень риска, связанный с предоставлением разрешения коду на вставку поставщика с конкретным именем или любым другим именем по его выбору. Пользователи должны использовать разрешение «insertProvider» вместо этого. Это позволило бы кому-то ввести, возможно, вредоносного поставщика (например, такого, который раскрывает передаваемые ему закрытые ключи) в качестве поставщика с наивысшим приоритетом. Это стало бы возможным, поскольку объект Security (который управляет установленным поставщиками) в настоящее время не проверяет целостность или подлинность поставщика перед его подключением. |
| setSystemScope | Установка области действия системной идентичности | Это позволило бы злоумышленнику настроить область действия системной идентичности с сертификатами, которым не следует доверять, тем самым предоставляя апплету или прикладному коду, подписанному этими сертификатами, привилегии, которые были бы запрещены исходной областью действия системной идентичности. |
| setIdentityPublicKey | Установка открытого ключа для идентичности | Если идентичность помечена как «доверенная», это позволяет злоумышленнику ввести другой открытый ключ (например, свой собственный), которому не доверяет область действия системной идентичности, тем самым предоставляя апплету или прикладному коду, подписанному этим открытым ключом, привилегии, которые в противном случае были бы запрещены. |
| setIdentityInfo | Установка строки общей информации для идентичности | Это позволяет злоумышленникам устанавливать общее описание для идентичности. Это может ввести в заблуждение приложения, заставив их использовать другую идентичность, нежели запланированная, или может помешать приложениям найти конкретную идентичность. |
| addIdentityCertificate | Добавление сертификата для идентичности | Это позволяет злоумышленникам установить сертификат для открытого ключа идентичности. Это опасно, поскольку это влияет на отношения доверия в системе. Этот открытый ключ внезапно становится доверенным для более широкой аудитории, чем это было бы в противном случае. |
| removeIdentityCertificate | Удаление сертификата для идентичности | Это позволяет злоумышленникам удалить сертификат для открытого ключа идентичности. Это опасно, поскольку это влияет на отношения доверия в системе. Этот открытый ключ внезапно считается менее надёжным, чем это было бы в противном случае. |
| printIdentity | Просмотр имени принципа и, необязательно, области, в которой оно используется, а также является ли оно «доверенным» в этой области | Выводимая область может быть именем файла, в этом случае она может передавать локальную информацию о системе. Например, вот пример вывода для идентичности с именем «carol», которая не помечена как доверенная в базе данных идентичностей пользователя: carol[/home/luehe/identitydb.obj][не доверенная] |
| getSignerPrivateKey | Получение закрытого ключа Signer | Разрешение доступа к закрытому ключу очень опасно; закрытые ключи должны храниться в секрете. В противном случае код может использовать закрытый ключ для подписи различных файлов и заявить, что подпись исходит от Signer. |
| setSignerKeyPair | Установка пары ключей (открытого и закрытого) для Signer | Это позволило бы злоумышленнику заменить пару ключей другого человека («цели») возможно менее надёжной парой ключей (например, парой ключей меньшего размера). Это также позволило бы злоумышленнику подслушивать зашифрованное общение между целью и её коллегами. Коллеги цели могут обернуть ключ сеанса шифрования под «новым» открытым ключом цели, что позволило бы злоумышленнику (который владеет соответствующим закрытым ключом) распаковать ключ сеанса и расшифровать данные сообщения, зашифрованные под этим ключом сеанса. |
- Примечание по реализации:
- Реализации могут определять дополнительные имена целевых объектов, но должны использовать соглашения об именовании, такие как обратная запись доменного имени, чтобы избежать конфликтов имён.
- С:
- 1.2
- См. также:
Краткое описание конструкторов
| Конструктор | Описание |
|---|---|
SecurityPermission |
Создаёт новый SecurityPermission с указанным именем. |
SecurityPermission |
Создаёт новый объект SecurityPermission с указанным именем. |
Краткое описание методов
Методы, объявленные в классе java.security.BasicPermission
equals, getActions, hashCode, implies, newPermissionCollection
Методы, объявленные в классе java.security.Permission
checkGuard, getName, toString
Подробное описание конструкторов
SecurityPermission
public SecurityPermission(String name)
SecurityPermission с указанным именем. Имя — это символическое имя SecurityPermission. Звёздочка может появляться в конце имени после точки или по отдельности, чтобы обозначить соответствие по шаблону.- Параметры:
-
name- имяSecurityPermission - Исключения:
-
NullPointerException- еслиnamenull. -
IllegalArgumentException- еслиnameпустое.
SecurityPermission
public SecurityPermission(String name, String actions)
SecurityPermission с указанным именем. Имя — это символическое имя SecurityPermission, а действия String в настоящее время не используются и должны быть null.- Параметры:
-
name- имяSecurityPermission -
actions- должно бытьnull. - Исключения:
-
NullPointerException- еслиnamenull. -
IllegalArgumentException- еслиnameпустое.
© 1993, 2023, Oracle and/or its affiliates. All rights reserved.
Documentation extracted from Debian's OpenJDK Development Kit package.
Licensed under the GNU General Public License, version 2, with the Classpath Exception.
Various third party code in OpenJDK is licensed under different licenses (see Debian package).
Java and OpenJDK are trademarks or registered trademarks of Oracle and/or its affiliates.
https://docs.oracle.com/en/java/javase/21/docs/api/java.base/java/security/SecurityPermission.html