Класс SecurityPermission
- java.lang.Object
-
- java.security.Permission
-
- java.security.BasicPermission
-
- java.security.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.getName(). Кроме того, существует аналогичный уровень риска, связанный с предоставлением коду разрешения на вставку провайдера с определенным именем или любым выбранным им именем. Пользователям следует использовать разрешение «insertProvider» вместо этого. Это позволило бы кому-то ввести, возможно, злонамеренного провайдера (например, такого, который раскрывает переданные ему закрытые ключи) в качестве провайдера с наивысшим приоритетом. Это было бы возможно, потому что объект Security (который управляет установленными провайдерами) в настоящее время не проверяет целостность или подлинность провайдера перед его подключением. |
| setSystemScope | Установка системного диапазона идентификаторов | Это позволило бы злоумышленнику настроить системный диапазон идентификаторов с сертификатами, которым нельзя доверять, тем самым предоставляя апплету или коду приложения, подписанному этими сертификатами, привилегии, которые система первоначально отклоняла бы. |
| setIdentityPublicKey | Установка открытого ключа для Identity | Если идентификатор помечен как «доверенный», это позволяет злоумышленнику ввести другой открытый ключ (например, свой собственный), которому не доверяет системный диапазон идентификаторов, тем самым предоставляя апплету или коду приложения, подписанному этим открытым ключом, привилегии, которые в противном случае были бы отклонены. |
| setIdentityInfo | Установка строки общей информации для Identity | Это позволяет злоумышленникам устанавливать общее описание для идентификатора. Это может ввести в заблуждение приложения, чтобы они использовали другой идентификатор, чем предполагалось, или может помешать приложениям найти определенный идентификатор. |
| addIdentityCertificate | Добавление сертификата для Identity | Это позволяет злоумышленникам установить сертификат для открытого ключа Identity. Это опасно, так как это влияет на доверительные отношения во всей системе. Этот открытый ключ внезапно становится доверенным для более широкой аудитории, чем это было бы в противном случае. |
| removeIdentityCertificate | Удаление сертификата для Identity | Это позволяет злоумышленникам удалить сертификат для открытого ключа Identity. Это опасно, так как это влияет на доверительные отношения во всей системе. Этот открытый ключ внезапно становится менее доверенным, чем это было бы в противном случае. |
| printIdentity | Просмотр имени принципала и, необязательно, диапазона, в котором он используется, и является ли он «доверенным» в этом диапазоне | Диапазон, который выводится на экран, может быть именем файла, в этом случае он может передавать информацию о локальной системе. Например, вот пример вывода идентификатора с именем «carol», который не является доверенным в базе данных идентификаторов пользователя: carol[/home/luehe/identitydb.obj][не доверен] |
| getSignerPrivateKey | Получение закрытого ключа Signer | Разрешение доступа к закрытому ключу очень опасно; закрытые ключи должны храниться в секрете. В противном случае код может использовать закрытый ключ для подписания различных файлов и утверждать, что подпись исходит от Signer. |
| setSignerKeyPair | Установка пары ключей (открытый ключ и закрытый ключ) для Signer | Это позволило бы злоумышленнику заменить пару ключей другого человека («цели») на, возможно, более слабую пару ключей (например, пару ключей меньшего размера). Это также позволило бы злоумышленнику прослушивать зашифрованное общение между целью и ее коллегами. Коллеги цели могут обернуть ключ сеанса шифрования под «новым» открытым ключом цели, что позволит злоумышленнику (который владеет соответствующим закрытым ключом) распаковать ключ сеанса и расшифровать данные общения, зашифрованные с помощью этого ключа сеанса. |
- Примечание реализации:
- Реализации могут определить дополнительные целевые имена, но должны использовать соглашения об именовании, такие как запись с обратным доменом, чтобы избежать конфликтов имен.
- С тех пор:
- 1.2
- См. также:
-
BasicPermission,Permission,Permissions,PermissionCollection,SecurityManager, Сериализованная форма
Конструкторы
| Конструктор | Описание |
|---|---|
SecurityPermission(String name) | Создает новую SecurityPermission с указанным именем. |
SecurityPermission(String name,
String actions) | Создает новый объект SecurityPermission с указанным именем. |
Методы
Методы, объявленные в классе java.security.BasicPermission
equals, getActions, hashCode, implies, newPermissionCollection Методы, объявленные в классе java.security.Permission
checkGuard, getName, toString Методы, объявленные в классе java.lang.Object
clone, finalize, getClass, notify, notifyAll, wait, wait, wait Конструкторы
SecurityPermission
public SecurityPermission(String name)
Создает новую SecurityPermission с указанным именем. Имя — это символическое имя SecurityPermission. Звездочка может появляться в конце имени после точки или сама по себе для обозначения подстановки.
- Параметры:
-
name- имя SecurityPermission - Исключения:
-
NullPointerException- еслиnameимеет значениеnull. -
IllegalArgumentException- еслиnameпустое.
SecurityPermission
public SecurityPermission(String name,
String actions) Создает новый объект SecurityPermission с указанным именем. Имя — это символическое имя SecurityPermission, а строка actions в настоящее время не используется и должна быть равна null.
- Параметры:
-
name- имя SecurityPermission -
actions- должно быть равно null. - Исключения:
-
NullPointerException- еслиnameимеет значениеnull. -
IllegalArgumentException- еслиnameпустое.
© 1993, 2020, 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/11/docs/api/java.base/java/security/SecurityPermission.html