2011-02-22 3 views

답변

3

내가 운 좋으면 두려워 할 것입니다.

Paŭlo Ebermann이 말한 것처럼 package.access은 패키지 계층을 차단할 수 있습니다. 당신은 당신이 정말로 dodgy 무언가를하고있는 일반적으로 지긋 지긋한 좋은 징조 인 주문 SecurityManager으로 이것에 대해 더 정확하게 말할 수 있습니다.

일반적으로 부모에게 위임하지 않는 ClassLoader을 만들 수 있습니다. 기술적으로는 현재의 Java SE 사양과 반대입니다. Java EE 사양이 권장합니다. java.util.Date을 차단할 수 있습니다. 다른 클래스가 참조하는 경우 여전히 리플렉션을 통해 액세스 할 수 있으며 인스턴스를 가져올 수도 있습니다. 어떤 방식 으로든 Date을 반환하는 것을 포함하여 Date의 사용이 일시적으로 중단되는 것을 차단할 수 있습니다. 그러나 최소 날짜로 구성표를 완성하려면 클래스 로더에 java.util.Date을로드해야합니다. 다른 모든 java.* 클래스와 함께 사용할 수는 없습니다.

그래서, ERR, 당신은 new Date(System.currentTimeMillis())new Date()을 제한하지 않을 클래스의 java.util.Date (아마도 자바 에이전트를 사용)의 rt.jar의 클래스 및 대체를 교체하십시오.

(, BTW System.currentTimeMillis() 및 기타 마법 방법에 대한 의존성을 줄여 아무것도 +1.)

2

특정 패키지에 대한 액세스를 제한하려면 실제로 .policy 파일이 아니라 security.properties 파일을 변경해야합니다. RuntimePermissions가 필요한 패키지를 나열하는 항목 package.access=...이 있습니다. 따라서 단일 클래스에 대한 액세스를 특별히 제한 할 수는 없으며 전체 패키지 (필요한 경우 하위 패키지 포함)에만 적용 할 수 있습니다 (예 : java.util). (Security.?etProperty 방법으로 액세스 할 수 있습니다.)

이렇게했다면 올바른 "RuntimePermission"을 정책에 추가하여 나중에 "양호한"코드에서 사용할 수있게 할 수 있습니다.

java.util에 대한 액세스를 제한하면 JRE의 상당 부분이 작동을 멈추게 될 것이라고 생각하므로 테스트를 위해 다른 클래스를 사용해보십시오.

+0

security.properties가있는 경로 –

1

샌드 박스는 대부분 작동하는 방법은 현재의 보안 관리자에게 보안에 민감한 물건을 할 클래스에서 전화가 있다는 것입니다 이러한 호출이 성공해야하는지 여부를 확인합니다. Date 클래스는 보안에 민감하지 않기 때문에 코드에는 그러한 호출이 없으므로 Tom과 Paulo가 설명했듯이이를 제한하는 것은 매우 어렵습니다.

예를 들어 대조적으로 파일 작업은 보안에 민감한 것으로 인식되므로 File 클래스가 SecurityManager를 호출합니다. 예를 들어 삭제 방법 : 당신이 파일을 더 쉽게와 .policy 파일 삭제 작업을 제한 할 수 있습니다 파일 클래스의 보안 관리자의 확인에

public boolean delete() { 
    SecurityManager security = System.getSecurityManager(); 
    if (security != null) { 
     security.checkDelete(path); 
    } 
    return fs.delete(this); 
} 

그리고 감사합니다.

관련 문제