문제

배경

시스템에서 분리 된 구성 요소의 이점 중 하나는 기존 코드를 만지지 않고 시스템을 확장 할 수 있다는 것입니다.

때로는 다음과 같이 디스크에서 클래스를 동적으로로드 할 수 있기 때문에 이전 코드를 다시 컴파일 할 필요조차 없습니다.

clazz = Demo.class.getClassLoader().loadClass("full.package.name.to.SomeClass");
.

종류의 종류의 플러그인 아키텍처 (주고 받거나)를 허용합니다.

질문

ClassLoader를 사용하여 디스크에서 클래스를 동적으로로드 할 때 악의적 인 코드가 실행되지 않도록 어떻게 실행하지 못하게합니까?

도움이 되었습니까?

해결책

이 질문은 이 하나의 의 중복입니다.스택 오버플로.

"플러그인 아키텍처"는 시스템의 나머지 부분과 밀접하게 상호 작용해야 할 필요가 있으므로 악성 코드에 대해 의미있게 방어 할 수있는 것과 같지 않습니다.그것은 당신이 이길 수없는 게임입니다. 그래서 그것을하지 마십시오.그 플러그인이 시스템에서 원하는대로 할 수 있으므로 신뢰할 수있는 플러그인 만 설치해야합니다.

다른 팁

악의적 인 코드를 피하기를 원할 때 질문은 "악의적 인 행동을 어떻게 정의합니까"입니까?플러그인이 사용자의 최선의 관심이 아니며 모든 것을 금지하는 것은 무의미한 운동 일 것입니다.

금지 된 기능을 블랙리스트 목록 대신, 오히려 허용 된 기능을 허용해야합니다.

플러그인을 제한된 기능으로 제한하려는 경우 Java에서 구현해서는 안됩니다.스크립팅 언어를 사용해야합니다. Java 인터페이스가 스크립팅 언어와 잘 기본값 스크립팅 언어는 아무 것도 할 수 없지만 패킷, 클래스 및 객체를 엔진에 선택적으로 노출 할 수 있습니다.이렇게하면 스크립팅 엔진이 할 수없고 할 수없는 것에 대한 세분화 된 제어 기능을 제공합니다.

서명 할 파일이 다소 도움이 될 수 있습니다.

JAR 서명에 대한 Wikipedia 기사가 있습니다.

여기에 중요한 Wikipedia 기사의 섹션이 있습니다 ...

개발자는 JAR 파일에 디지털 서명 할 수 있습니다. 이 경우 서명 정보는 임베디드 매니페스트 파일의 일부가됩니다. 항아리 자체 서명되지 않았지만 대신 아카이브 내의 모든 파일이 나열됩니다. 그것의 체크섬과 함께; 서명 된이 체크섬입니다. 여러 엔티티가 JAR 파일에 서명하여 JAR 파일 자체를 변경할 수 있습니다. 서명 된 파일 자체가 유효하지만 각 서명을 통해. Java Runtime이 서명 된 JAR 파일을로드하면 유효성을 검사 할 수 있습니다. 서명과 일치하지 않는 클래스를 서명하고 거부합니다. 클래스 로더가 할 수있는 '밀폐 된'패키지를 지원할 수도 있습니다. Java 클래스 만 동일한 패키지에만로드 할 수만 있습니다. 모두 동일한 엔티티가 서명합니다. 이렇게하면 악성 코드가 방지됩니다 기존 패키지에 삽입되어 있으므로 패키지 범위 클래스 및 데이터.

개발자는 JAR 파일의 사용자가 JAR 파일을 완성 할 수 있습니다. 포함하는 코드에 대해 많은 정보를 제공하지 않거나 휴대 전화 응용 프로그램에서 유용한 크기를 줄입니다. 개발.

나는 일반적으로 Wikipedia를 링크하고 인용하지 않을 것입니다. 아니오는 아직이 해결책을 언급했지만, 그것은 내 전문 분야에 없습니다. 조금 더 많은 Java 경험을 가진 누군가가 자세한 답변을 줄 것이라면, 나에게 코멘트를 떨어 뜨리고이 답변을 제거 할 것입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 softwareengineering.stackexchange
scroll top