Класс 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 в «null» 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. |
| accessDeclaredMembers | Доступ к объявленным членам класса | Это предоставляет коду разрешение на запрос класса для его общедоступных, защищенных, унаследованных (пакетных) и закрытых полей и/или методов. Хотя код будет иметь доступ к именам закрытых и защищенных полей и методов, он не получит доступ к данным закрытых/защищенных полей и не сможет вызвать никакие закрытые методы. Тем не менее, вредоносный код может использовать эту информацию для более точного нацеливания атаки. Кроме того, он может вызывать любые общедоступные методы и/или обращаться к общедоступным полям в классе. Это может быть опасно, если код обычно не может вызывать эти методы и/или обращаться к полям, потому что он не может привести объект к классу/интерфейсу с этими методами и полями. |
| queuePrintJob | Инициирование запроса печати | Это может напечатать конфиденциальную информацию на принтере или просто потратить бумагу. |
| getStackTrace | Получение информации о стеке вызовов другого потока | Это позволяет получить информацию о стеке вызовов другого потока. Это может позволить вредоносному коду отслеживать выполнение потоков и обнаруживать уязвимости в приложениях. |
| setDefaultUncaughtExceptionHandler | Установка обработчика по умолчанию для использования при неожиданном завершении работы потока из-за необработанного исключения | Это позволяет злоумышленнику зарегистрировать вредоносный обработчик необработанных исключений, который может помешать завершению работы потока. |
| preferences | Представляет разрешение, необходимое для доступа к реализациям java.util.prefs.Preferences для пользователя или корневого каталога системы, что, в свою очередь, позволяет выполнять операции получения или обновления в постоянном хранилище Preferences. | Это разрешение позволяет пользователю читать или записывать в хранилище настроек, если пользователь, выполняющий код, имеет достаточные привилегии ОС для чтения/записи в это хранилище. Фактическое хранилище может располагаться в традиционном каталоге файловой системы или в реестре в зависимости от ОС платформы. |
| usePolicy | Предоставление этого разрешения отключает стандартное поведение запроса безопасности Java Plug-In. | Для получения дополнительной информации см. руководства Java Plug-In, Основные принципы безопасности апплетов и Разрешение usePolicy. |
- См. также:
-
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.