Класс RuntimePermission
- java.lang.Object
-
- java.security.Permission
-
- java.security.BasicPermission
-
- java.lang.RuntimePermission
- Все реализованные интерфейсы:
-
Serializable,Guard
public final class RuntimePermission extends BasicPermission
Этот класс предназначен для разрешений во время выполнения. Разрешение RuntimePermission содержит имя (также называемое «именем цели»), но не список действий; у вас есть разрешение с заданным именем или нет.
Имя цели — это имя разрешения во время выполнения (см. ниже). Имена следуют соглашениям об именовании иерархических свойств. Также может использоваться символ звездочки в конце имени после точки или сам по себе, чтобы обозначить подстановочный знак. Например: «loadLibrary.*» и «*» обозначают подстановочный знак, а «*loadLibrary» и «a*b» — нет.
В следующей таблице перечислены стандартные RuntimePermission имена целей, а также для каждого из них приведено описание того, что разрешение позволяет, и обсуждение рисков предоставления коду этого разрешения.
| Имя целевого разрешения | Что разрешает это разрешение | Риски предоставления этого разрешения |
|---|---|---|
| createClassLoader | Создание загрузчика классов | Это чрезвычайно опасное разрешение для предоставления. Злонамеренные приложения, способные создавать собственные загрузчики классов, могут затем загружать в систему собственные вредоносные классы. Эти вновь загруженные классы могут быть помещены в любую область защиты загрузчиком классов, тем самым автоматически предоставляя классам разрешения для этой области. |
| getClassLoader | Получение загрузчика классов (например, загрузчика классов вызывающего класса) | Это предоставит злоумышленнику разрешение получить загрузчик классов для определённого класса. Это опасно, так как доступ к загрузчику классов класса позволяет злоумышленнику загружать другие классы, доступные этому загрузчику. В противном случае злоумышленник обычно не имел бы доступа к этим классам. |
| setContextClassLoader | Установка контекстного загрузчика классов, используемого потоком | Контекстный загрузчик классов используется системным кодом и расширениями, когда им необходимо найти ресурсы, которые могут отсутствовать в системном загрузчике классов. Предоставление разрешения setContextClassLoader позволит коду изменить контекстный загрузчик классов, используемый для конкретного потока, включая системные потоки. |
| enableContextClassLoaderOverride | Реализация подкласса методов контекстного загрузчика потока | Контекстный загрузчик классов используется системным кодом и расширениями, когда им необходимо найти ресурсы, которые могут отсутствовать в системном загрузчике классов. Предоставление разрешения enableContextClassLoaderOverride позволит подклассу Thread переопределить методы, используемые для получения или установки контекстного загрузчика классов для конкретного потока. |
| closeClassLoader | Закрытие загрузчика классов | Предоставление этого разрешения позволяет коду закрыть любой URLClassLoader, к которому у него есть ссылка. |
| setSecurityManager | Установка менеджера безопасности (возможно, замена существующего) | Менеджер безопасности — это класс, позволяющий приложениям реализовывать политику безопасности. Предоставление разрешения setSecurityManager позволит коду изменить менеджер безопасности, установив другой, возможно, менее строгий менеджер безопасности, тем самым обойдя проверки, которые были бы выполнены исходным менеджером безопасности. |
| createSecurityManager | Создание нового менеджера безопасности | Это даёт коду доступ к защищённым, чувствительным методам, которые могут раскрыть информацию о других классах или стеке вызовов. |
| getenv.{имя переменной} | Чтение значения указанной переменной среды | Это позволит коду прочитать значение или определить наличие конкретной переменной среды. Это опасно, если переменная содержит конфиденциальные данные. |
| exitVM.{статус завершения} | Остановка виртуальной машины Java с указанным статусом завершения | Это позволяет злоумышленнику осуществить атаку типа «отказ в обслуживании», автоматически заставив виртуальную машину остановиться. Примечание: разрешение «exitVM.*» автоматически предоставляется всему коду, загруженному из пути класса приложения, тем самым позволяя приложениям завершать себя. Также разрешение «exitVM» эквивалентно разрешению «exitVM.*». |
| shutdownHooks | Регистрация и отмена хуков завершения виртуальной машины | Это позволяет злоумышленнику зарегистрировать вредоносный хук завершения, который мешает чистому завершению работы виртуальной машины. |
| setFactory | Установка сокет-фабрики, используемой ServerSocket или Socket, или фабрики обработчика потока, используемой URL | Это позволяет коду установить фактическую реализацию сокета, серверного сокета, обработчика потока или фабрики сокетов RMI. Злоумышленник может установить некорректную реализацию, которая повреждает поток данных. |
| setIO | Установка System.out, System.in и System.err | Это позволяет изменить значение стандартных системных потоков. Злоумышленник может изменить System.in для мониторинга и кражи пользовательского ввода или может установить System.err в «нулевой» OutputStream, что скрыло бы любые сообщения об ошибках, отправленные в System.err. |
| modifyThread | Модификация потоков, например, посредством вызовов методов Thread interrupt, stop, suspend, resume, setDaemon, setPriority,
setName и setUncaughtExceptionHandler | Это позволяет злоумышленнику изменить поведение любого потока в системе. |
| stopThread | Остановка потоков посредством вызовов метода Thread stop | Это позволяет коду остановить любой поток в системе, при условии, что ему уже предоставлено разрешение на доступ к этому потоку. Это представляет угрозу, так как этот код может повредить систему, убив существующие потоки. |
| modifyThreadGroup | Изменение групп потоков, например, через вызовы методов ThreadGroup destroy, getParent, resume, setDaemon, setMaxPriority, stop, и suspend | Это позволяет злоумышленнику создавать группы потоков и устанавливать их приоритет выполнения. |
| getProtectionDomain | Получение ProtectionDomain для класса | Это позволяет коду получить информацию о политике для определённого источника кода. Хотя получение информации о политике не компрометирует безопасность системы, оно предоставляет злоумышленникам дополнительную информацию, например, локальные имена файлов, для более точной атаки. |
| getFileSystemAttributes | Получение атрибутов файловой системы | Это позволяет коду получить информацию о файловой системе, такую как использование диска или доступное дисковое пространство для вызывающего кода. Это потенциально опасно, так как раскрывает информацию о конфигурации аппаратного обеспечения системы и некоторую информацию о привилегиях вызывающего кода на запись файлов. |
| readFileDescriptor | Чтение дескрипторов файлов | Это позволит коду прочитать конкретный файл, связанный с дескриптором файла. Это опасно, если файл содержит конфиденциальные данные. |
| writeFileDescriptor | Запись в дескрипторы файлов | Это позволяет коду записывать в конкретный файл, связанный с дескриптором. Это опасно, потому что может позволить вредоносному коду внедрять вирусы или, как минимум, заполнить весь ваш диск. |
| loadLibrary.{имя библиотеки} | Динамическая загрузка указанной библиотеки | Разрешение апплету загружать библиотеки нативного кода опасно, так как архитектура безопасности Java не предназначена и не предотвращает злонамеренного поведения на уровне нативного кода. |
| accessClassInPackage.{имя пакета} | Доступ к указанному пакету через метод loadClass загрузчика классов, когда загрузчик классов вызывает метод SecurityManager checkPackageAccess | Это даёт коду доступ к классам в пакетах, к которым он обычно не имеет доступа. Вредоносный код может использовать эти классы для помощи в попытке компрометации безопасности системы. |
| defineClassInPackage.{имя пакета} | Определение классов в указанном пакете через метод defineClass загрузчика классов, когда загрузчик классов вызывает метод SecurityManager checkPackageDefinition | Это предоставляет коду разрешение определить класс в определённом пакете. Это опасно, так как вредоносный код с этим разрешением может определить вредоносные классы в надёжных пакетах, таких как java.security или java.lang, например. |
| defineClass | Определение класса с помощью Lookup.defineClass. | Это предоставляет коду с соответствующим привилегированным объектом Lookup разрешение определять классы в том же пакете, что и класс поиска объекта Lookup. |
| accessDeclaredMembers | Доступ к объявленным членам класса | Это предоставляет коду разрешение запрашивать у класса его публичные, защищённые, по умолчанию (пакетные), и частные поля и/или методы. Хотя код будет иметь доступ к именам частных и защищённых полей и методов, он не будет иметь доступа к данным частных/защищённых полей и не сможет вызывать какие-либо частные методы. Тем не менее, вредоносный код может использовать эту информацию для более точной атаки. Кроме того, он может вызывать любые публичные методы и/или получать доступ к публичным полям в классе. Это может быть опасно, если код обычно не смог бы вызывать эти методы и/или получать доступ к полям, так как он не может привести объект к классу/интерфейсу с этими методами и полями. |
| queuePrintJob | Инициализация запроса задания печати | Это может напечатать конфиденциальную информацию на принтере или просто потратить бумагу. |
| getStackTrace | Получение стека вызовов другого потока | Это позволяет получить информацию о стеке вызовов другого потока. Это может позволить вредоносному коду отслеживать выполнение потоков и обнаруживать уязвимости в приложениях. |
| getStackWalkerWithClassReference | Получение обработчика стека вызовов, который может получать кадры стека с ссылкой на класс | Это позволяет получить объекты Class из прохода по стеку вызовов. Это может позволить вредоносному коду получить доступ к объектам Class в стеке вызовов за пределами своего контекста. |
| setDefaultUncaughtExceptionHandler | Установка обработчика по умолчанию для использования при внезапном завершении потока из-за необработанного исключения | Это позволяет злоумышленнику зарегистрировать вредоносный обработчик необработанных исключений, который может помешать завершению работы потока |
| preferences | Представляет разрешение, необходимое для получения доступа к реализациям java.util.prefs.Preferences для пользователя или системного корня, что, в свою очередь, позволяет выполнять операции извлечения или обновления в постоянном хранилище Preferences. | Это разрешение позволяет пользователю читать из или записывать в хранилище настроек, если пользователь, выполняющий код, имеет достаточные привилегии ОС для чтения/записи в это хранилище. Фактическое хранилище может находиться в традиционной директории файловой системы или в реестре в зависимости от платформы ОС. |
| manageProcess | Завершение и информация о процессах в нативном коде ProcessHandle. | Разрешает коду идентифицировать и завершать процессы, которые он не создавал. |
| localeServiceProvider | Это RuntimePermission должно быть предоставлено классам, которые являются подклассами и реализуют java.util.spi.LocaleServiceProvider. Разрешение проверяется во время вызова конструктора базового класса. Это разрешение гарантирует доверие классам, которые реализуют этот механизм предоставления, чувствительный к безопасности. | См. java.util.spi.LocaleServiceProvider для получения дополнительной информации. |
| loggerFinder | Это RuntimePermission необходимо предоставлять классам, которые наследуются от или вызывают методы класса java.lang.System.LoggerFinder. Разрешение проверяется во время вызова конструктора абстрактного базового класса, а также при вызове его публичных методов. Это разрешение гарантирует доверие классам, которые предоставляют логгеры системным классам. | См. java.lang.System.LoggerFinder для получения дополнительной информации. |
|---|---|---|
| accessSystemModules | Доступ к системным модулям в исполняемой среде. | Это предоставляет разрешение на доступ к ресурсам в системных модулях в исполняемой среде. |
- Замечание по реализации:
- Реализации могут определять дополнительные имена целей, но должны использовать соглашения об именовании, такие как обратный домен, для предотвращения конфликтов имен.
- С:
- 1.2
- См. также:
-
BasicPermission,Permission,Permissions,PermissionCollection,SecurityManager, Сериализованная форма
Конструкторы
| Конструктор | Описание |
|---|---|
RuntimePermission(String name) | Создаёт новый RuntimePermission с указанным именем. |
RuntimePermission(String name,
String actions) | Создаёт новый объект RuntimePermission с указанным именем. |
Методы
Методы, объявленные в классе 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 Подробное описание конструкторов
RuntimePermission
public RuntimePermission(String name)
Создаёт новый RuntimePermission с указанным именем. Имя — это символическое имя RuntimePermission, например, "exit", "setFactory" и т. д. Звёздочка может появляться в конце имени после точки или сама по себе, чтобы обозначить сопоставление по шаблону.
- Параметры:
-
name- имя RuntimePermission. - Исключения:
-
NullPointerException- еслиnameявляетсяnull. -
IllegalArgumentException- еслиnameпустое.
RuntimePermission
public RuntimePermission(String name,
String actions) Создаёт новый объект RuntimePermission с указанным именем. Имя — это символическое имя RuntimePermission, а строка действий в настоящее время не используется и должна быть равна null.
- Параметры:
-
name- имя RuntimePermission. -
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/lang/RuntimePermission.html