JavaTM Platform
Standard Ed. 6

java.lang
클래스 RuntimePermission

java.lang.Object 
  상위를 확장 java.security.Permission 
      상위를 확장 java.security.BasicPermission 
          상위를 확장 java.lang.RuntimePermission
모든 구현된 인터페이스:
Serializable , Guard


public final class RuntimePermission
extends BasicPermission

이 클래스는, 실행시의 액세스권에 관련합니다. RuntimePermission 는, 타겟명이라고도 불리는 이름을 포함합니다만, 액션 리스트는 포함하지 않습니다. 이름이 붙은 액세스권 (이름 첨부 액세스권)은 가져도 가지지 않아도 괜찮습니다.

타겟명에는, 실행시 액세스권 (아래를 참조)의 이름을 지정합니다. 명명 규약은, 계층형 프로퍼티의 명명 규약에 따릅니다. 또, 타겟명의 후에 asterisk를 지정해 ( 「.」의 후에 지정하는지, 단독으로 지정), 와일드 카드에 의한 조합을 실시할 수도 있습니다. 다음에 예를 나타냅니다. 예를 들어, 「loadLibrary. *」(이)나 「*」은 유효합니다만, 「*loadLibrary」나 「a*b」는 무효입니다.  

다음의 겉(표)에, 사용 가능한 RuntimePermission 타겟명을 일람에 정리해 각각 붙어, 허가하는 액세스권과 코드에 허가하는 것에 의해 생기는 리스크를 나타냅니다.  

액세스권 타겟명 액세스권에 의해 허가되는 기능 이 액세스권을 허가했을 경우의 리스크
createClassLoader 클래스 로더의 작성. 이 액세스권을 주는 것은 지극히 위험합니다. 악의가 있는 어플리케이션이 독자적인 클래스 로더의 인스턴스를 생성해, 파괴 행위를 실시하는 클래스를 시스템에 로드할 가능성이 있습니다. 이 새롭게 로드 된 클래스가 같은 클래스 로더에 의해 보호 도메인에 놓여져 로드 된 클래스에, 그 도메인의 액세스권이 자동적으로 주어질 가능성이 있습니다.
getClassLoader 클래스 로더 (호출측 클래스의 클래스 로더등)의 취득. 이것에 의해, 특정의 클래스의 클래스 로더를 취득하기 위한 액세스권을, 공격자에게 주게 됩니다. 어느 클래스의 클래스 로더에 액세스 할 수 있으면(자), 공격자는, 그 클래스 로더로부터 사용할 수 있는 것 외의 클래스를 로드할 수 있게 되기 (위해)때문에, 이 액세스권은 위험합니다. 본래는, 그러한 클래스에는 액세스 할 수 없습니다.
setContextClassLoader 특정의 thread에 의해 사용되는 문맥 클래스 로더의 설정. 문맥 클래스 로더는, 시스템 클래스 로더에 존재하지 않을 가능성이 있는 자원을 찾을 필요가 있을 때, 시스템 코드 및 extension에 의해 사용됩니다. setContextClassLoader 액세스권을 주면(자), 코드는, 시스템 thread를 포함해 특정의 thread로 사용하는 문맥 클래스 로더를 변경할 수 있게 됩니다.
enableContextClassLoaderOverride thread의 문맥 클래스 로더 메소드의 서브 클래스 구현 문맥 클래스 로더는, 시스템 클래스 로더에 존재하지 않을 가능성이 있는 자원을 찾을 필요가 있을 때, 시스템 코드 및 extension에 의해 사용됩니다. enableContextClassLoaderOverride 액세스권의 허가에 의해, thread의 서브 클래스는, 특정의 thread의 문맥 클래스 로더의 취득 또는 설정에 사용되는 메소드를 오버라이드(override) 할 수 있다
setSecurityManager 시큐리티 매니저의 설정 (기존의 시큐리티 매니저의 교환도 포함한다). 시큐리티 매니저란, 어플리케이션이 시큐리티 정책를 구현할 수 있는 클래스입니다. setSecurityManager 액세스권을 주면(자), 코드는, 다른 시큐리티 매니저 (보다 제한의 적은 시큐리티 매니저등)를 로드해, 사용하는 시큐리티 매니저를 변경할 수 있게 됩니다. 이 결과, 원의 시큐리티 매니저에 의해 부과되고 있던 체크를 회피할 수 있게 됩니다.
createSecurityManager 새로운 시큐리티 매니저의 작성. 이것에 의해, 코드는, 다른 클래스 또는 실행 스택에 관한 정보를 개시해 버리는 것 같은, 보호된, 신중하게 취급되어야 할 메소드에 액세스 할 수 있게 됩니다.
getenv. {variable name} 지정된 환경 변수의 값의 읽기. 코드를 사용해 특정의 환경 변수의 값의 읽기나 존재의 판정을 실시할 수가 있다. 변수가 기밀 데이터를 포함하고 있는 경우, 이것은 위험하다
exitVM. {exit status} 지정된 종료 상태에서의 Java 가상 머신의 정지. 공격자는, Java 가상 머신을 자동적으로 강제 정지시키는 서비스 방해 공격을 장치할 수가 있게 됩니다. 주:어플리케이션 클래스 패스로부터 로드 된 모든 코드에 액세스권 「exitVM. *」(이)가 부여되기 (위해)때문에, 어플리케이션은 스스로를 종료시킬 수가 있습니다. 또, 액세스권 「exitVM」는 「exitVM. *」라고 동등합니다.
shutdownHooks Java 가상 머신의 종료 훅의 등록 및 해제. 공격자는 악의가 있는 종료 훅을 등록해, Java 가상 머신의 깨끗한 종료을 변경할 수 있게 됩니다.
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 등의 메소드의 호출을 사용한 thread의 변경 공격자는, 시스템내의 임의의 thread의 동작을 변경할 수 있다
stopThread Thread 의 stop 메소드의 호출에 의한 thread의 정지. thread에의 액세스권을 벌써 취득하고 있는 경우, 코드로부터, 시스템내의 어느 thread에서도 정지할 수 있게 됩니다. 실행중의 thread가 종료 당해 시스템이 파괴될 가능성이 있습니다.
modifyThreadGroup ThreadGroup 의 destroy,getParent,resume,setDaemon,setMaxPriority,stop, 및 suspend 등의 메소드의 호출 (을) 통한 thread 그룹의 변경 공격자는, thread 그룹을 작성해, 그 실행의 우선 순위를 설정할 수 있게 됩니다.
getProtectionDomain 특정의 클래스의 ProtectionDomain 의 취득. 코드로부터, 특정의 코드 소스의 정책 정보를 취득할 수 있게 됩니다. 정책 정보가 도둑맞아도 시스템의 시큐리티가 위협해지는 것은 아니지만, 공격의 목적을 보다 정확하게 정하기 위한 로컬 파일명등의 추가 정보를 공격자에게 주어 버리게 됩니다.
getFileSystemAttributes 파일 시스템 속성의 취득. 호출 측에 사용 가능한 디스크 사용량이나 디스크 용량등의 파일 시스템 정보를, 코드로 취득할 수 있도록(듯이) 합니다. 이것은, 시스템의 하드웨어 구성에 관한 정보라고 불러 방편측의 파일의 기입 특권에 관한 일부의 정보를 개시하기 위해(때문에), 위험을 수반할 가능성이 있습니다.
readFileDescriptor 파일 기술자의 읽기. 코드로부터, 읽어낸 파일 기술자가 관련지을 수 있고 있는 파일을 읽어낼 수가 있게 됩니다. 파일에 기밀 데이터가 포함되어 있는 경우, 이 액세스권은 위험합니다.
writeFileDescriptor 파일 기술자에게로의 기입해. 코드로부터, 그 파일 기술자가 관련지을 수 있고 있는 파일에 기입할 수 있게 됩니다. 악의가 있는 코드로 바이러스를 감염시키거나 디스크 전체를 묻을 수가 있으므로 위험하다
loadLibrary. {library name} 지정한 라이브러리의 동적인 링크. Java 의 시큐리티 아키텍쳐(architecture)는, native code 레벨에서의 악의가 있는 행동을 저지하지 못하고, 그처럼은 설계되고 있지 않습니다. 이 때문에, native code 라이브러리의 로드 허가를 애플릿에게 주는 것은 위험합니다.
accessClassInPackage. {package name} 클래스 로더가 시큐리티 매니저의 checkPackageAccess 메소드를 호출했을 때에, 클래스 로더의 loadClass 메소드를 개입시켜, 지정된 패키지에 액세스를 허가한다 일반적으로은 액세스 할 수 없는 패키지내의 클래스에, 코드로부터 액세스 할 수 있게 됩니다. 이 때문에, 악의가 있는 코드가, 이러한 클래스를 이용해 시스템의 시큐리티를 위협할 가능성이 있습니다.
defineClassInPackage. {package name} 클래스 로더가 시큐리티 매니저의 checkPackageDefinition 메소드를 호출할 때, 그 클래스 로더의 defineClass 메소드를 사용해, 지정한 패키지내에 클래스를 정의한다. 이것에 의해, 특정의 패키지내에 클래스를 정의하기 위한 액세스권을 코드에게 주게 됩니다. 이 액세스권이 주어진 악의가 있는 코드는,java.securityjava.lang 등의 신뢰할 수 있는 패키지내에 파괴 행위를 실시하는 클래스를 정의할 가능성이 있기 (위해)때문에, 이 액세스권은 위험합니다.
accessDeclaredMembers 특정의 클래스에서 선언되고 있는 멤버에게로의 액세스. 특정의 클래스내의 public, 디폴트 (패키지) 액세스, protected, 및 private 인 필드나 메소드에 관한 문의를 실시하는 코드 액세스권을 코드에게 주게 됩니다. 이 액세스권이 주어진 코드는, private 및 protected 인 필드명과 메소드명에는 액세스 할 수 있지만, private 및 protected 인 필드의 데이터에는 액세스 할 수 없고, private 인 메소드를 호출할 수 없습니다. 그러나, 공격의 목적을 보다 정확하게 정하기 (위해)때문에, 악의가 있는 코드가 이 정보를 이용할 가능성이 있습니다. 또, 클래스내의 public 인 메소드를 호출하거나 public 인 필드에 액세스 하거나 할 가능성이 있습니다. 코드가, 메소드와 필드가 포함되는 클래스나 인터페이스에 객체를 캐스트 할 수 없기 위해(때문에), 일반적으로은 코드가 이러한 메소드를 호출하거나 필드에 액세스 하거나 할 수 없는 경우는 위험합니다.
queuePrintJob 인쇄 작업 요구의 발행. 기밀 정보가 인쇄될 가능성이 있는 것 외에 용지가 낭비될 가능성이 있습니다.
getStackTrace 다른 thread의 스택 트레이스 정보의 취득 다른 thread의 스택 트레이스 정보를 취득할 수 있다. thread의 실행을 감시해, 어플리케이션의 취약성을 발견하는 악의가 있는 코드를 가능하게 하므로 위험하다
setDefaultUncaughtExceptionHandler 캐치 되지 않는 예외에 의해, 돌연 thread가 종료했을 때에 사용되는 디폴트의 핸들러를 설정한다 공격자는, thread의 종료를 방해할 수 있는, 악의가 있는 캐치 되지 않는 예외 핸들러를 등록할 수 있다
preferences java.util.prefs 에의 액세스에 필요한 액세스권을 나타낸다. preferences 구현의 사용자 또는 시스템 루트는, preferences 지속 배킹 스토어내에서 취득 또는 갱신 조작을 실행할 수 있다 이 액세스권에 의해, 코드를 실행하고 있는 사용자가 필요한 OS 특권을 가지고 있는 경우, 그 사용자는 preferences 지속 배킹 스토어에 읽기나 기입을 실시할 수가 있습니다. 실제의 배킹 스토어는, 종래의 파일 시스템 디렉토리인가, 플랫폼의 OS 에 의존하는 레지스트리내에 있습니다.

관련 항목:
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 - namenull 의 경우
IllegalArgumentException - name 가 빈 상태(empty)의 경우

RuntimePermission

public RuntimePermission(String  name,
                         String  actions)
지정된 이름을 가지는 새로운 RuntimePermission 객체를 생성합니다. 이름은 RuntimePermission 의 기호명입니다. String 의 actions 는 현재 사용되지 않고, null 가 됩니다.

파라미터:
name - RuntimePermission 의 이름
actions - null 가 아니면 안된다
예외:
NullPointerException - namenull 의 경우
IllegalArgumentException - name 가 빈 상태(empty)의 경우

JavaTM Platform
Standard Ed. 6

버그의 보고와 기능의 요청
한층 더 자세한 API 레퍼런스 및 개발자 문서에 대해서는,Java SE 개발자용 문서를 참조해 주세요. 개발자전용의 상세한 해설, 개념의 개요, 용어의 정의, 버그의 회피책, 및 코드 실례가 포함되어 있습니다.

Copyright 2006 Sun Microsystems, Inc. All rights reserved. Use is subject to license terms . Documentation Redistribution Policy 도 참조해 주세요.