자바 애플릿의 보안 한계 넘어서기

자바 애플릿의 기본 권한은 보잘 것 없습니다. 지역 하드 디스크의 파일을 쓰기는커녕 읽지도 못하며, 애플릿 코드가 있는 서버가 아니면 소켓 연결도 할 수 없습니다. 데이터베이스 연결에 사용되는 JDBC-ODBC 브리지 기술도 직접 사용할 수가 없지요.
(애플릿에서는 JDBC-ODBC 브리지 기술을 사용할 일은 거의 없습니다. JDBC-ODBC는 로컬 ODBC 데이터베이스 드라이버에 접속하는 기술이므로 보통 웹 서버에 접속할 필요가 있는 애플릿으로서는 별 의미가 없는 셈입니다. 참고로 애플릿에서 sun.jdbc.odbc 패키지를 사용하려면 다음과 유사한 내용의 정책 파일이 필요합니다.)

grant codeBase "http://java.freehosting.co.kr/-" {
  permission java.lang.RuntimePermission "accessClassInPackage.sun.jdbc.odbc";
};

하지만 항상 방법이 없는 것은 아닙니다. 자바 2 플랫폼은 애플릿 서명이라는 방법을 선택하지 않더라도 손쉽게 애플릿의 권한을 지정해주는 방법을 제공합니다. 보안의 기본 원칙은 '명시적으로 허용된 것 외에는 모두 금지하라'입니다. 명시적으로 애플릿의 권한을 추가해주는 방법을 잠깐 알아볼까요?

JDK 1.2에는 policytool이라는 프로그램이 있습니다.

Policy Tool image

이 도구를 사용하면 보안 정책 파일을 쉽게 만들 수 있습니다. 다음은 policytool을 사용하여 만든 정책 파일 예입니다. 일반적인 텍스트 형식을 가지므로 직접 편집할 수도 있습니다.

grant codeBase "http://java.freehosting.co.kr/-" {
  permission java.io.FilePermission "test.txt", "read, write";
};

이 파일은 http://java.freehosting.co.kr 아래에 있는 URL의 애플릿에게 test.txt라는 파일을 읽거나 쓸 수 있는 권한을 주라는 의미를 가지고 있습니다.

정책 파일 이름을 지정하여 다음과 같이 애플릿뷰어를 실행해보세요.

appletviewer -J-Djava.security.policy=http://java.freehosting.co.kr/tutorial/security/testPolicy http://java.freehosting.co.kr/tutorial/security/FileWriteApplet.html

애플릿의 버튼을 누를 때마다 애플릿뷰어를 실행한 디렉토리에 test.txt라는 파일이 생성됨을 볼 수 있습니다.


File Write Permission Test Applet(플러그인 사용)

</COMMENT>

파일 이름이 grant된 것과 같아야 실행이 됩니다.

애플릿뷰어는 JDK에 포함되어 있으므로
$(JDK12)/jre/lib/security/java.policy를 참조하고
($JDK12는 윈도우에서 기본값으로 C:\jdk1.2에 설치됩니다.)
자바 플러그인은 기본값으로 JRE의 런타임을 사용하므로
$(JRE12)/lib/security/java.policy를 참조합니다.
($JRE12는 윈도우에서 기본값으로
C:\Program Files\Javasoft\JRE\1.2에 설치됩니다.)
이 부분을 확인해보시기 바랍니다.

자바 플러그인 패널에서 직접 JDK의 JRE를 사용하도록 고쳐주는 것도 좋은
방법이겠네요.
자바 플러그인 제어 패널에서 직접 정책 파일을 지정하려면
제어 패널을 실행시킨 후 Basic 탭에서 Java Run Time Parameters 항목에 직접

    -Djava.security.policy=정책파일이름(혹은 URL)

을 써주면 됩니다.
예를 들면

    -Djava.security.policy=C:\temp\testPolicy
혹은
    -Djava.security.policy=http://java.freehosting.co.kr/tutorial/security/testPolicy

애플릿뷰어를 실행하면 물론 실행한 현재 디렉토리에 파일이 생기구요,
자바 플러그인의 경우에는 어디에 생길지 모르겠네요.
익스플로러 4의 경우에는 c:\users 디렉토리에 만드는군요. 익스플로러 5(NT 4)의 경우에는 현재
사용자의 바탕 화면에 만드는군요.
넷스케이프 4의 경우에는 C:\Program Files\Netscape\Communicator\Program 디렉토리에 만든다고 합니다.
가능하면 현재 디렉토리가 아닌 절대 경로로 예제를 만들 걸 그랬네요.

이 페이지는 1999년 1월 17일에 처음 만들어지고, 1999년 12월 11일에 마지막으로 갱신되었습니다.
Last modified: Fri Jan 14 10:11:38 2000