Класс 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. Поскольку DomainCombiner может содержать конфиденциальную информацию, это потенциально может привести к утечке данных. |
| 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 name} | Добавление нового поставщика с указанным именем | Использование этого разрешения не рекомендуется, так как можно обойти ограничения имени, переопределив метод Provider.getName(). Кроме того, существует аналогичный уровень риска, связанный с предоставлением разрешения коду на вставку поставщика с конкретным именем или любым выбранным им именем. Пользователи должны использовать разрешение "insertProvider" вместо этого. Это позволило бы кому-то ввести потенциально вредоносного поставщика (например, такого, который раскрывает приватные ключи, переданные ему) в качестве поставщика с наивысшим приоритетом. Это стало бы возможным, поскольку объект Security (который управляет установленными поставщиками) в настоящее время не проверяет целостность или подлинность поставщика перед его подключением. |
| setSystemScope | Установка области действия идентификатора системы | Это позволило бы злоумышленнику настроить область действия идентификатора системы с сертификатами, которым не следует доверять, тем самым предоставив привилегии коду апплета или приложения, подписанному этими сертификатами, которые были бы запрещены исходной областью действия идентификатора системы. |
| setIdentityPublicKey | Установка открытого ключа для идентификатора | Если идентификатор помечен как «доверенный», это позволяет злоумышленнику ввести другой открытый ключ (например, свой собственный), которому не доверяет область действия идентификатора системы, тем самым предоставив привилегии коду апплета или приложения, подписанному этим открытым ключом, которые были бы запрещены в противном случае. |
| setIdentityInfo | Установка строки общей информации для идентификатора | Это позволяет злоумышленникам устанавливать общее описание для идентификатора. Это может ввести в заблуждение приложения, заставив их использовать другой идентификатор, чем предполагалось, или может помешать приложениям найти определенный идентификатор. |
| addIdentityCertificate | Добавление сертификата для идентификатора | Это позволяет злоумышленникам установить сертификат для открытого ключа идентификатора. Это опасно, потому что это влияет на отношения доверия в системе. Этот открытый ключ внезапно становится доверенным для более широкой аудитории, чем это было бы в противном случае. |
| removeIdentityCertificate | Удаление сертификата для идентификатора | Это позволяет злоумышленникам удалить сертификат для открытого ключа идентификатора. Это опасно, потому что это влияет на отношения доверия в системе. Этот открытый ключ внезапно считается менее надёжным, чем это было бы в противном случае. |
| printIdentity | Просмотр имени принципала и, по желанию, области, в которой он используется, а также является ли он «доверенным» в этой области | Область, которая выводится на печать, может быть именем файла, в этом случае она может передать информацию о локальной системе. Например, вот пример вывода идентификатора с именем «carol», который не является доверенным в базе данных идентификаторов пользователя: carol[/home/luehe/identitydb.obj][not trusted] |
| getSignerPrivateKey | Получение закрытого ключа подписывающего лица | Разрешение доступа к закрытому ключу очень опасно; закрытые ключи должны храниться в секрете. В противном случае код может использовать закрытый ключ для подписи различных файлов и утверждать, что подпись исходит от подписывающего лица. |
| setSignerKeyPair | Установка пары ключей (открытый и закрытый ключ) для подписывающего лица | Это позволило бы злоумышленнику заменить пару ключей кого-то другого («цели») на, возможно, более слабую пару ключей (например, пару ключей меньшего размера). Это также позволило бы злоумышленнику прослушивать зашифрованное общение между целью и её партнёрами. Партнёры цели могут обернуть ключ сеанса шифрования под открытым ключом цели, что позволит злоумышленнику (который обладает соответствующим закрытым ключом) распаковать ключ сеанса и расшифровать данные обмена, зашифрованные под этим ключом сеанса. |
- Замечание по реализации:
- Реализации могут определять дополнительные имена целевых объектов, но должны использовать соглашения об именовании, такие как обозначения обратного домена, чтобы избежать конфликтов имён.
- С:
- 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)
- Параметры:
-
name- имя SecurityPermission - Исключения:
-
NullPointerException- еслиnameравноnull. -
IllegalArgumentException- еслиnameпусто.
SecurityPermission
public SecurityPermission(String name, String actions)
- Параметры:
-
name- имя SecurityPermission -
actions- должно быть равно null. - Исключения:
-
NullPointerException- еслиnameравноnull. -
IllegalArgumentException- еслиnameпусто.
© 1993, 2021, 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/17/docs/api/java.base/java/security/SecurityPermission.html