이제 메소드를 '수정 자 없음'으로 표시하여 클래스 & 패키지에서만 액세스 할 수 있음을 알았습니다.Java 보안 : 클래스가 특정 패키지에서만 액세스 할 수 있도록하려면 어떻게해야합니까?
이 경우에도 내가 필요한 것은 아닙니다. 내가 필요한 것은 다음과 같습니다.
"Secure.java"클래스의 메소드는 같은 JAR 파일의 다른 클래스에서만 액세스 할 수 있습니다.
및
(이 추가입니다) 호출이 안전한 방법으로 구성되어, 호출 스택 다시 다시 다시 A 없음 보안 클래스 &에 가지 않습니다. 예를 들어 :
이 좋다 :
- com.nonsecure.ClassA.doStuff()
- com.nonsecure.ClassB.doStuff을 (호출)
- com.secure.Secure.doStuff를 호출 ,369 :()는
- com.secure.SecureB.doStuff()를
이 나쁜입니다 호출
- com.nonsecure.ClassA.doStuff()는
- com.nonsecure.ClassB.doStuff()
- com.secure.Secure.doStuff을 (호출)
- COM 호출을 호출합니다. 보안되지 않은 .ClassC.doStuff은() [BAD을 : 우리는 보안 JAR의 클래스 밖에 갔다!] 호출
- com.secure.SecureB.doStuff()를
지금 내가 할 수있는 생각 약간 수동 작업을 통해이 작업을 수행하십시오.
private void checkSecurity()
{
StackTraceElement[] stackTraceElements = Thread.currentThread().getStackTrace();
for (StackTraceElement stackTraceElement : stackTraceElements)
{
// TODO: Add a little magic to check that we've not stepped outside the secure packages.
if (!stackTraceElement.getClassName().startsWith("com.secure"))
{
throw new SecurityException("Woop!");
}
}
}
질문 : Java가 제공하는 뭔가가 여기에있는 것처럼 느껴 집니까?
내가 약
AccessController.doPrivileged(new PrivilegedExceptionAction<String>()
을 읽을 수 있지만 액세스하는 자원/네트워크 연결 등에 대해 것 같다했습니다 하지 패키지 보호의 일종을 보장하기 위해 호출 스택에 액세스하는 방법에 대한.
참고 : 나는 봄에게 보안 코드를 포함하는 3
- 인증서와 을 체결한다.
- 보안 클래스에 대한 액세스는 JAR 내에서만 에서 이루어 지므로 JAR 외부에서 직접 액세스는 허용되지 않아야합니다. 이 허용됩니다.
이 SecureMap 유형의 객체를 사용해야하는 클래스는 최대 700 개까지있을 수 있으며, 한 패키지에 700 개의 파일 (모든 지원 클래스)을 갖고 싶지는 않습니다. –
@jeffporter 질문에 새 제약 조건을 추가해야합니다. – EJP