문제

나는 최근에 받은 나의 취미는 java 프로젝트는 포함된 페이지 이 덕분에 매우 사이트, 하지만 이제는 내가 하는 일부 보안 문제입니다.

가 include:

import java.sql.*;

라인:

Class.forName("com.mysql.jdbc.Driver").newInstance();

뿐만 아니라 mysql.jar 파일에서 내 src 디렉토리에서 작동합니다,본체와 애플릿을 작동 애플릿에서까지는 의 forname()선에서 내 코드는,어디가 발생한 예외:

    Exception: com.mysql.jdbc.Driverjava.lang.ClassNotFoundException: com.mysql.jdbc.Driver
    java.security.AccessControlException: access denied (java.lang.RuntimePermission exitVM.-1)
    at java.security.AccessControlContext.checkPermission(Unknown Source)
    at java.security.AccessController.checkPermission(Unknown Source)
    at java.lang.SecurityManager.checkPermission(Unknown Source)
    at java.lang.SecurityManager.checkExit(Unknown Source)
    at java.lang.Runtime.exit(Unknown Source)
    at java.lang.System.exit(Unknown Source)
    at applet.Database.connectDB(Database.java:80)
    etc...

나는 생각될 수 있으로 문제를 해결할 수있는 클라이언트입니다.정책 파일,그렇지 않으면 내가 필요할 수 있습을 쓰고 추상화 계층을 사용하는 서버-클라이언트 네트워크 연결을 쿼리에서 server-side...

나는 확실히 Java 지도자는 여기에서 아마도 가장 좋은 방법을 알고 있다고한다.

도움이 되었습니까?

해결책

보안 예외는 실제로 Class.forname () 이후 애플릿에서 System.exit () 호출에서 나온 것 같습니다. 일반적으로 전체 JVM을 종료하므로 서명되지 않은 애플릿에서 System.exit ()를 호출 할 수 없습니다. Line 80이 실제로 Class.forname () 행인지 확인 했습니까? 아니면 드라이버가로드하지 않으면 System.exit ()를 호출하려는 예외 핸들러가 있습니까?

어쨌든, 애플릿에 mysql jar 파일을로드하려면 다음과 같은 아카이브 속성에 포함시켜야합니다.

<APPLET ARCHIVE="mysql.jar" CODEBASE="./src/" ...

이 단계를 지나면 Webserver와 동일한 IP 번호/호스트 이름으로 MySQL 서버를 호스팅하고 애플릿에 액세스 할 수있는 동일한 사람들에게 열어야합니다. Tony가 말했듯이, 이것은 보안상의 이유로 사람들이 일반적으로하는 방식이 아닙니다. 앱 서버를 제어하고 XML 또는 기타 데이터 교환 방법을 사용하여 데이터를 애플릿으로 가져 오는 경우 서버 측에 무언가를 작성하는 것이 좋습니다. 물론 애플릿에 대해 배우기 위해 실험을하고 있다면 아마 괜찮을 것입니다. 그러나 가능하면 MySQL을 방화벽 뒤에 유지해야합니다.

다른 팁

애플릿에서 JDBC 드라이버를 사용하려는 경우 애플릿에 인증서로 서명해야하며, 클라이언트 측에 애플릿이로드 될 때 서버는이 인증서를 전달해야합니다.

이를 위해 허용되는 방법은 애플릿이로드 된 서버의 데이터에 대한 HTTP 요청을 작성하고 서버에서 쿼리를 실행하는 것입니다. JSON 또는 XML은 애플릿과 서버간에 데이터를 교환하는 좋은 방법입니다 (AJAX 응용 프로그램을 수행하는 방식과 유사하고 브라우저와 서버간에 XML 또는 JSON을 보내는 것과 유사합니다).

다른 답변 중 하나 (@Leigh Caldwell)에서 언급했듯이 강하게 이런 식으로 일을하지 않는 것이 좋습니다. 애플릿이 MySQL에 액세스 할 수 있다면 세상의 모든 사람들도 마찬가지입니다. 탈퇴는 요즘 너무 사소하여 부지런한 해커가 애플릿 자격 증명을 데이터베이스에 가져 오는 순간 일뿐입니다. 또한 MySQL의 사용자/패스 인증은 상당히 약하며 대부분의 보안은 IP 기반입니다. 그것을 세상까지 열어서, 당신은 당신의 첫 번째 연기 라인을 버리고 있습니다.

더 나은 접근 방식은 서버 측에 일종의 프론트 엔드 프로토콜을 구축하는 것입니다 (XMLRPC는 좋은 기초가되고 사용하기 쉬울 것입니다). 애플릿이 데이터베이스에 대한 액세스가 절대적으로 필요한 경우 가장 좋은 방법은 HSQLDB 메모리에서. 파일 권한이 필요하지 않으며 Sandbox에서 완전히 실행할 수 있습니다. 로컬 메모리 데이터베이스는 위에서 언급 한 XMLRPC 정면을 사용하여 필요에 따라 서버와 동기화 될 수 있습니다.

제거 해보십시오 newInstance() 부분. 난 그냥 가지고 있다고 생각합니다 Class.forName() 드라이버를로드하기 위해합니다.

예외는 애플릿을 할 수 없었다드 드라이버 클래스입니다.애플릿을 요구하는 다운로드 항아리를 포함하는 클래스에서 런타임을 통해,HTTP,그래서 당신이 있어야 합 항아리(mysql.jar 그것이 무엇이든지 모든 것이라고)에서 사용할 수 있습니다.

일단 당신이 이 문제를 해결하는 사용자가 허용 애플릿 사용 권한을 만들 수 있도록 TCP 소켓 연결을 mysql db 서버입니다.그들은이 대화 상자가 나타납...

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