자바 애플릿의 기본 권한은 보잘 것 없습니다. 지역 하드 디스크의 파일을 쓰기는커녕 읽지도 못하며, 애플릿 코드가 있는 서버가 아니면 소켓 연결도 할 수 없습니다. 데이터베이스 연결에 자주 사용되는 JDBC-ODBC 브리지 기술도 직접 사용할 수가 없지요.
하지만 항상 방법이 없는 것은 아닙니다. 자바 2 플랫폼은 애플릿 서명이라는 방법을 선택하지 않더라도 손쉽게 애플릿의 권한을 지정해주는 방법을 제공합니다. 보안의 기본 원칙은 '명시적으로 허용된 것 외에는 모두 금지하라'입니다. 명시적으로 애플릿의 권한을 추가해주는 방법을 잠깐 알아볼까요?
JDK 1.2에는 policytool이라는 프로그램이 있습니다.
이 도구를 사용하면 보안 정책 파일을 쉽게 만들 수 있습니다. 다음은 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라는 파일이 생성됨을 볼 수 있습니다.
이 애플릿은 자바 2의 보안 정책을 지원하는 브라우저에서만 정상 동작할 것입니다. IE 4,5와 넷스케이프 4는 자바 2를 지원하지 않으므로 JDK 1.2에 포함된 애플릿뷰어로 봐야 합니다. 파일 이름이 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=http://java.freehosting.co.kr/tutorial/security/testPolicy 혹은 -Djava.security.policy=C:\test.policy 와 같이 직접 정책 파일 경로를 지정해주면 됩니다. 애플릿뷰어를 실행하면 물론 실행한 현재 디렉토리에 파일이 생기구요, 자바 플러그인의 경우에는 어디에 생길지 모르겠네요. 익스플로러 4의 경우에는 c:\users 디렉토리에 만드는군요. 익스플로러 5(NT)의 경우는 현재 사용자의 바탕 화면에 만드는군요.. 흠... 넷스케이프 4의 경우에는 C:\Program Files\Netscape\Communicator\Program 디렉토리에 만든다고 합니다. 이렇게 현재 디렉토리에다가 파일을 만드는 예제는 귀찮군요. 절대 경로를 지정해서 만들어보세요.