2009-08-25 3 views
7

응용 프로그램 서버 프로세스를 실행하는 사용자의 권한으로 Java 웹 응용 프로그램을 보호하는 것으로 충분합니까 아니면 적합한 정책 파일과 함께 SecurityManager를 사용하는 것이 합리적입니까?Java 웹 응용 프로그램에서 Security Manager를 사용해야합니까?

필자는 전에는 사용했으나 후자는 사용하지 않았지만 일부 고객은 모든 제 3 자 구성 요소에 명시 적으로 권한을 부여하여 거기에 숨어있는 악의적 인 코드가 없는지 확인하는 SecurityManager를 사용하기를 바랍니다.

Resin과 같은 서블릿 컨테이너를 보았을 때 SecurityManager를 사용하지 않는 것이 좋습니다. 이견있는 사람?

답변

9

보안 기능을 사용하여 이 아닌을 추천하는 것은 싫지만, SecurityManager는 신뢰할 수없는 코드 또는 제 3 자 코드가 JVM에서 실행되는 상황을 관리하기위한 목적으로 설계되었습니다. 애플릿 또는 호스팅 된 공유 응용 프로그램 서버 시나리오를 고려하십시오. 앱 서버를 완벽하게 제어 할 수 있고 다른 사람의 코드를 실행하지 않는 경우 중복되는 것 같습니다. Enable the SecurityManager는 내 경험에 중요한 성능 영향을 미칩니다.

+0

우리의 경우 3 부 코드는 다양한 알려진 OS 라이브러리입니다. 코드의 모든 라인을 검토하여 잠재적 인 "나쁜"코드가 있는지 확인하는 것은 많은 작업입니다. 나는이 라이브러리를 신뢰하지만 고객은 약간 편집증 적이다. – Kaitsu

+0

다른 사람의 코드를 실행하지 않는다고 말하기 전에주의해야한다. 예를 들어, XML 외부 구문 (XEE) 공격은 XML을 구문 분석하는 데 사용될 수 있지만 대부분의 사람들은 '단지 데이터'라고 말합니다. – bgiles

1

질문에 대한 간단한 예/아니오 답변은 실제로 달라지기 때문에 : 보안을 설정하고 보호하려는 항목은 무엇입니까?

예를 들어 SecurityManager를 사용하여 IP 필터링을 구현하고 허용 된 IP 주소 만 내 응용 프로그램에 연결할 수 있도록했습니다. 디스크 파일에 대한 액세스를 허용하지 않으려면 권한이 적은 사용자로 응용 프로그램을 실행하는 것이 더 나은 해결책 일 수 있습니다.

타사 플러그인을 전혀 신뢰하지 않으면 플러그인 코드 실행을 허용하면 해당 플러그인이 SecurityManager를 사용하는 경우에도 응용 프로그램을 중단시킬 수 있음을 기억하십시오. 응용 프로그램이 플러그인을로드하는 경우 플러그 인을 허용 목록에 추가하고 플러그인을로드하기 전에 목록을 확인하는 것이 더 나은 해결책 일 수 있습니다.

당신이 그것을 사용하기로 결정했다면, JVM은 더 많은 검사를 할 것이므로 성능이 떨어지게 될 것입니다.하지만 실행 속도는 검사를 수행 할 코드/구성에 달려 있습니다. 내 IP 허용 목록은 단일 목록 조회 만 포함 된 이후 매우 빨랐습니다. 원격 웹 서비스를 호출하고 데이터베이스에 액세스하는 것이 포함되어 있으면 수표의 속도를 늦출 수 있지만 다른 한편으로는 하드웨어가 충분하고 동시 사용자가 적은 경우 (즉, 감당할 수있는 경우) .

1

Java의 보안 관리자를 올바르게 구성하면 어려울 수 있습니다. 예를 들어 보안 관리자 자체를 제한하지 않으면 Security Manager를 null로 설정하여 모든 보안을 우회 할 수 있습니다.

보안 관리자를 사용하면 JVM에서 코드를 실행하는 경우에만 의미가 있습니다. 그렇지 않으면 각 기능에 대해 어떤 권한을 설정해야하는지 미리 알아야하기 때문에 설정하는 것이 어려워집니다 (예 : RMI , 소켓, I/O) 및 각 클라이언트에 대한 정보를 제공합니다.