현재 샌드 박스에서 신뢰할 수없는 코드를 가장 잘 수행하는 방법을 이해하기 위해 Java의 보안 메커니즘을 많이 실험하고 있습니다. 보호하고 싶은 것 중 하나는 무한 루프로, 신뢰할 수없는 코드를 자체 스레드에서 실행하는 것이 이상적입니다. 물론 악의적 인 코드는 예를 들어 처리량이 많아 걸려있는 스레드가 될 수 있습니다. 이 스레드를 근본적으로 제거하는 유일한 방법은 Java의 사용되지 않는 Thread.stop() 메커니즘을 사용하는 것입니다. 이것이 문제가되는 가장 큰 이유는 스레드가 보유한 모든 잠금이 해제되어 객체가 손상 될 수 있기 때문입니다.Java : 잠금 획득 모니터링
질문 : Java의 SecurityManager 및 사용자 정의 클래스 로더를 사용하면 어떤 클래스를로드 할 수 있고 어떤 시스템 리소스에 액세스 할 수 있는지 추적 할 수 있습니다. 현재 스레드가 동기화 된 블록에 들어가기 전에 알려주는 콜백을 정의하는 등의 방법으로 코드가 잠금을 획득하는 것을 알리고 잠재적으로이를 금지하는 방법이 있습니까?
사실, 나는 잠재적으로 잠금을 획득하기 때문에 클래스를 삭제하고 싶지는 않지만 이상적입니다. 물론 자바에서 모든 클래스에 대해 작동하지 않는다는 점을 제외하고는 콜백을로드하고 삽입하는 동안 바이트 코드를 변경할 수 있습니다. *. monitorenter는 VM에게 잠금 장치를 가져 오도록 지시하는 유일한 바이트 코드 명령어입니까? –
그러나 동기화 된 블록을 컴파일 할 때 monitreter는 발생하지만 동기화 된 메서드를 호출하면 잠금 획득이 암시 적입니다. 따라서 스레드가 동기화 된 메서드로 공유 객체에 액세스 할 수 없게해야합니다. 코드가 java. *에 있다면 악의가 없다고 가정해야합니다. –
java. *의 코드는 악의가 아닙니다. 그러나 java. *의 객체가 java.concurrent의 대기열과 같이 공유되는 경우 객체가 외부에서 사용 되더라도 java. *에서 잠금을 가져옵니다. –