Servlet 3.0 스펙에 기인한 보안 논쟁

서블릿 API에 근간한 대부분의 자바 웹 어플리케이션 프레임웍은 web.xml파일에 하나 이상의 서블릿, 필터, 리스너 등 웹 어플리케이션에 관계한 설정을 기술해야만 합니다. 의존관계에 있는 WEB-INF/lib 디렉토리의 jar들도 포함해서 말이죠.
EE6의 한 부분을 구성하는 Servlet 3.0 스펙인 JSR-315은 이것을 바꿀 방법을 모색하고 있습니다. 서블릿 3.0 스펙은 현재 Public Review 상태이면 그 내용은 아래 링크에서 확인하실 수 있습니다.

JSR-000315 JavaTM Servlet 3.0 Specification

서블릿 3.0 스펙에는 무설정(Zero Configuration) 지향과 이식성(Plugability) 향상을 목표로 다음과 같은 새로운 기능이 추가됩니다.
    1. annotation의 추가 : 서블릿 3.0 스펙에는 서블릿의 url-mapping 정보를 제공하기위한 @Servlet과 같은 수 개의 새로운 어노테이션(@ServletFilter, @FilterMapping 등)이 추가됩니다.
    2. web.xml의 분할(fragments) 설정 지원 : 서블릿 정의, 필터 혹은 리스너 등을 각각 지정한 설정 파일을 web.xml에 merge하는 방식을 채택해 개개의 웹 프레임워크 jar 파일들의 각자 고유한 설정을 가질 수 있도록 하였습니다.
Flag(metadata-complete)는 annotation과 fragment 모두의 스캐닝을 제어하는데 이용됩니다.

위와 같은 사양 추가로 인해 원치않는 서블릿이나 필터들의 배포로 야기될 수 있는 보안 위협에 Expert Group내에서도 적지않은 논쟁을 펼치고 있습니다. 물론, 그런 보안 위협은 제거할 수 있을만큼 충분히 유연하다는 의견도 만만치 않구요.
이에 대한 Expert Group의 잠정적인 결론은 커뮤니티의 피드백을 받아보자는 쪽인것 같습니다.

Greg Wilkins는 Automatic Scanning 과 분할된 설정파일의 merge를 예로든 그의 글을 통해 <include>라는 옵셔널 엘리먼트를 추가하는 방식을 제안했습니다.
"Without a web.xml or with a 3.0 web.xml that does not list any inclusions,
the default would be to search all of WEB-INF for annotated servlets and filters,
TLD listeners and web.xml fragments as currently proposed. If however,
a web.xml contained <include> element, then the discovery process would be
modified as the following examples illustrate:
<include src="WEB-INF/lib/dwr.jar"/>
<include src="WEB-INF/lib/cometd.jar"/>
<include src="WEB-INF/classes"/>
This include would scan only the dwr.jar and cometd.jar for annotations,
TLD fragments and web.xml fragments, the WEB-INF/classes directory would be scanned for
annotated servlets. No other jars or classes would be scanned unless listed in their
own include elsewhere in the web.xml."
Specification 리더중의 한 명인 Rajiv Mordani는 위와 같은 방법에 놀랍긴 해도 수긍할 순 없다고 하네요.
"Greg Wilkins의 제안하는 방법은 의도하지 않은 서블릿과 필터들이 노출되는 것을 우려하는
곳에나 먹히는 매우 특별한 경우로 그것은 프레임워크 개발자의 문제이며 특정 컴포넌트를
노출하지 않기를 원하는 이용자의 문제는 아니라고 생각한다. 이런 경우라면 flag를 이용하여
jar의 집합으로부터 효율적으로 스캐닝을 컨트롤 할 수 있다."  

다른 두 가지 가능성에 대해 올해 Java One Conference에서 Expert Group 사이에서 논의가 있었습니다.
한 가지 방법은 web fragments와 annotations의 스캐닝 여부를 활성화(enable/disable)하는 두 번째 flag를
metadata-complete에 추가하는 방법이 있겠습니다.
Rajiv Mordani의 요지는 어노테이션 메카니즘은 이미 web.xml 파일의 설정을 상속받을 수 있도록 구현 되었기
때문에, 이런 방법을 통해서도 원하는 수준의 제어가 가능하다는 것입니다.
"When you use annotations to declare servlets and Filters then you must have a url-mapping
/ FilterMapping attribute on the corresponding servlet / Filter.
In this way there is no convention by which a servlet is exposed without having an explicit mapping.
Also, as with the rest of the Java EE platform, specifically technologies like EJB and Web Services,
the deployment descriptor is used to override information that is specified via annotations....
If you didn't want any of the annotations to be processed at all by the container and wanted to specify
all the configuration via the deployment descriptor, then, like with the rest of the Java EE 5 platform,
we have the metadata-complete element in the descriptor. If the element is present and set to "true" then
the container will not process any annotations and just use the configuration specified in the descriptor.
This provides a way [to] disable the auto-scanning for those that have concerns about performance,
and security.”

마지막 방법은 아래와 유사한 방식으로 서블릿과 필터를 무효화하는 메카니즘을 web.xml에 기술하자는것
<servlet>
      <servlet-name>FrameworkServlet</servlet-name>
      <enabled>false</enabled>    
</servlet>
등이 있습니다.

해당 이슈에 관심이 있거나 feedback을 원하는 분은 jsr-315-comments@jcp.org으로 의견을 보내실 수 있습니다.
2008/12/29 15:05 2008/12/29 15:05
Trackback Address:이 글에는 트랙백을 보낼 수 없습니다
  1. Blog Icon

    서블릿 3.0에서 서버 푸쉬를 지원한다고 하던데 요런 이슈도 있었군요~
    건강 꼭 챙기시공 조만간 뵈용 ㅋㅋ

Java Blueprints web application layout 과 Jakarta web application layout의 차이

** 본 포스팅은 2006년 12월 20일 네이버 블로그에 포스팅한 내용을 백업, 내용을 보강한 것입니다. **

자바 진영에서 웹어플리케이션(jsp,servlet,jsf,struts,webwork 등을 통틀어)을 구성하는데는 크게 두가지의 표준디렉토리 레이아웃이 존재한다.
( 모든 웹 프로젝트가 표준을 따르는것은 아니며 각각의 프로젝트마다 달라질 수있다. 여기서는 두 표준이 제시하는 디렉토리 레이아웃을
살펴보고자 할 따름이다.)

하나는 SUN에서 내 놓은 JAVA Blueprint, 나머지 하나는 자카르타 프로젝트이다.
두 레이아웃의 차이는 아래 다이어그램으로 표현 할 수 있다.

java blueprint web application layout 과 jakarta web application layout의 차이


주황색으로 구분지어 놓은 부분이 두 구성간의 디렉토리 차이이다.

J2EE 환경을 구축하기 위해선 Java Blurprint 형식의 레이아웃이 더 알맞은 형식이라 생각한다.
netbeans 에서 웹 어플리케이션 프로젝트를 생성 하면 위의 두 형식의 표준을 모두 지원한다.
메뉴 -> File -> New Project... -> 프로젝트 카테고리에서 Web 선택 -> next 하면 아래와 같은 대화창이 뜬다.

넷빈즈에서 웹어플리케이션 레이아웃 선택 옵션


붉은 색 박스 안과 같이 두 양식 중 하나를 선택 할 수 있으며 이 두 양식의 선택에 따라 아래와 같은 표준 레이아웃으로 프로젝트가 생성 된다.
(추가 : 현재의 넷빈즈는(버전 6.0이상) 위와 같은 옵션이 사라지고 Java BluePrints형식에 맞추어 디렉토리가 설정됩니다. )

웹어플리케이션간 디렉토리의 차이


맨 위 디렉토리 형식에 추가하여 nbproject 와 test 디렉토리가 추가로 생성 되는데 nbproject에는 해당 웹 프로젝트에 대한 메타 데이타와
build.xml에 기술 되어야 할 앤트 스크립트의 실제 내용이 배치되며, test 디렉토리에는 test용 클래스등을 구성 할 수 있는 디렉토리로 존재하게 된다.

* MANIFEST.MF ?
Executable JAR 파일을 생성 할 때 main 클래스를 지정 하게 되는데
이 내용을 기술 하는 텍스트 파일이다.

그 기술 내용은

Mainfest-Version: 1.0
Main-Class: [filename] (.class 없이)
Created-By: [생성자 정보] (필요한 내용을 자유롭게 기술...)

이며 
실행은 콘솔에서
java -jar jarfilename.jar [엔터]
혹은 jre 가 설치 되었다면  jar 파일을 더블클릭 하는것으로 실행이 가능하다.

2008/12/23 11:14 2008/12/23 11:14
Trackback Address:이 글에는 트랙백을 보낼 수 없습니다

Microsoft에서 개발한 iPhone App - Seadragon Mobile

MS Live Labs에서 마이크로소프트사의 첫번째 iPhone용 어플리케이션인 Seadragon Mobile 을 출시하였습니다.Seadragon은 MS사의 Deep Zoom 기능을 이용한 이미지 뷰어 어플리케이션입니다. 고해상도의 많은 이미지의 효율적인 관리가 가능하다고 하고 애플 앱스토어에서 무료로 다운로드 할 수 있다고 합니다.

Seadragon Mobile

애플 앱스토어에 게시된 Seadragon Mobile



Seadragon은
Photosynth(링크의 스크린 캐스트 참조)라는 MS의 Photo-browsing 기술을 이용하고 있습니다.

Seadragon Mobile이 지향하는 바는 모바일 디바이스 유저가 그들의 기기에서 다량의 고해상도 이미지를 부드럽고 자연스럽게 보여주는데 있다고 합니다. 이 어플리케이션의 초기 리뷰들이 대부분 긍정적인 반응을 보였지만 몇몇은 속도에 불만을 토로하고 있다고 하네요. Seadragon Mobile은 10 기가픽셀(!!) 이상의 샘플 이미지가 포함되어 있으며, 이용자는 photosynth feed나 RSS 이미지 feed를 통하여 컨텐트를 추가할 수 있다고 합니다.

시연이 아닌 실제 제품으로 PhotoSynth를 이용해 볼 수 있다니.. iPhone에서 동작하는 Seadragon을 보고싶네요.
2008/12/17 15:07 2008/12/17 15:07
Trackback Address:이 글에는 트랙백을 보낼 수 없습니다

OS - 웹 브라우저별 화면 캡처

사이트를 개발하다 보면, 혹은 호기심에라도 특정 URL이 여러 OS와 다양한 브라우저에서 보여지는 모습을 확인할 필요가 생기기 마련이다.

이런 경우 간편하게 온라인상에서 각 OS별로 웹브라우저에서 보여지는 웹 화면을 캡처 해주는 사이트가 있다.

http://browsershots.org/

사이트의 소개에 따르면 Johann C. Rocholl씨가 만들었고 Open Source로 진행되고 있는 서비스라고 한다.

XML-RPC도 지원하기 때문에 외부에서 매쉬업 할 수있는 길도 열어 놓았다.

어떤식으로 브라우저를 캡처해 내는지 궁금해서 소스를 내려받았는데 파이썬으로 되어있네..
파이썬의 P도 모르는 게 못내 아쉬운 순간이다.

2008/12/17 13:49 2008/12/17 13:49
Trackback Address:이 글에는 트랙백을 보낼 수 없습니다

Online Cross-Browser, Web Browser Screen Capturing, Screenshot Tools

  • Browser Cam
    Subscription, fee-based service that creates screen captures of your Web pages loaded in a multitude of the latest and older browsers, numerous operating systems and versions, a wide range of screen resolutions, and full page or partial page screenshots. Recently added PDA and other small screens. Includes virtual computer use, too. Incredibly helpful and valuable tool. Free trial.
  • Browsershots
    Free service that takes full page screenshots with Mac OS X (Safari) and quite a few browsers for several versions of Linux. For example, as of 19 Dec 2006:
    • Debian (Linux): Konqueror 3.5.4
    • PLD Linux: Epiphany 2.14.3, Firebird 0.7, Firefox 1.0.8, Firefox 3.0a1, Flock 0.7.7, Netscape Navigator 4.8, Opera 9.02, Phoenix 0.5, SeaMonkey 1.0.5
    • Ubuntu Edgy (Linux): Epiphany 2.16, Firefox 2.0, Galeon 2.0.2, Mozilla 1.7.12
    • Mac OS X: Safari 2.0
    [Free service provided by Browsershots.org.]
  • iCapture
    Free screenshots with OS X 10.4.8 and Safari 2.0.4. [Free service provided by Dan Vine.]
  • ieCapture
    Free screenshots with Internet Explorer 7. [Free service provided by Dan Vine.]
  • IE NetRenderer
    Free screenshots - “This IE Browser Compatibility Checker allows you to see how your website is rendered by Internet Explorer 7, 6 or 5.5, as seen from a high speed datacenter located in Germany” Does a good job, immediate results - no waiting. [Free service provided by IPInfo Security Patrol.]
  • lixlpixel Screen Capture
    Free screenshots with these Mac browsers: Safari 2.0, Internet Explorer 5.2.3, Mozilla 1.7.7. The screenshot results are immediate, too - no waiting. Works great. Donation requested.
  • 2008/12/16 22:44 2008/12/16 22:44
    Trackback Address:이 글에는 트랙백을 보낼 수 없습니다

    자바 제한자 정리 : Modifires Matrix in Java

    자바를 입문하면 가장 처음에 다루는 것중 하나인 제한자를 정리하는 차원에서 각 제한자별로 사용가능한 곳과 그렇지 않은 곳을 구분해
    일람을 작성해 봤습니다. 흔히 접하는 접근 제한자 외에도 잘 사용하지 않는 native라던지 strictft 같은 제한자도 함께 표기합니다.

    대상 변수 메소드 생성자 클래스 인터페이스
    제한자 외부 내부 외부 내부
    abstract X O X O O O O
    final O O X O O X X
    native X O X X X X X
    private O O O X O X O
    protected O O O X O X O
    public O O O O O O O
    static O O X X O X O
    synchronized X O X X X X X
    transient O X X X X X X
    volatile O X X X X X X
    strictfp X O X O O O O


    제한자 사용 규칙 ( 곰곰히 따져보면 아래 룰과 같이 될 수 밖에 없습니다.)
     - 메소드는 public, protected, private, default 중 오직 하나의 접근 제한자를 갖습니다.
     - 클래스는 abstract와 final을 동시에 지정할 수 없습니다.
     - abstract 메소드는 private, static, final, native, strictfp, synchronized 중 어떤 제한자도 사용할 수 없습니다.
     - 메소드는 native, strictfp를 동시에 지정할 수 없습니다.
     - abstract와 native 메소드는 body를 갖지 않습니다.
         예) abstract void someMethos();
         예) native void someMethos();
     - abstract 메소드를 갖는 클래스는 해당 abstract메소드를 구현해야만 합니다.
     - final 변수는 volatile일 수 없습니다.

    java_langspec-3.0.pdf

    Java Language Spec 3.0




    위와 관련한 Sun의 공식 문서는 아래 url에서 참조하실 수 있습니다.
     Java Language Specification SE 3.0
      final Variables
      Class Modifires
      Field Modifires
      Constructor Modifires
      Interface Modifires
      Evolution of Classes
      FP-strict Expressions
    2008/12/15 18:32 2008/12/15 18:32
    Trackback Address:이 글에는 트랙백을 보낼 수 없습니다

    이런 길치!!!


    저녁 시간 즈음에 출퇴근 중 읽을 책을 사러 강남엘 나갔다.
    왠일인지 오늘따라 일식 라면에 맥주 한 잔이 급 땡겨 서점 들렀다 요기도 할 겸 일전에 회사 동료랑 들렀던 라면집에 갈 계획도 세웠다.
    몇 권의 책을 들고 라면+맥주 콤비를 먹을 마냥 행복한 기분으로 그 라면집을 찾아갔는데.. 도대체 어디인지를 모르겠다!!!
    파빌리온 골목 근방이었는데..  

    아무리 기억을 되짚어보고, 근방을 돌아다녀도 찾을수가 없다!!! ( T.T)

    이런 길치...
    이렇게 오늘 하루 소소한 행복이 날아가 버렸다.

    2008/12/14 22:22 2008/12/14 22:22
    Trackback Address:이 글에는 트랙백을 보낼 수 없습니다

    The Human Pixels

    우크라이나 TV광고 중 하나라고 하는데..
    실사 촬영이라면 정말 대단한 노력을 기했을듯..

    1+1... 무슨광고일까나..

    [Flash]

    2008/12/12 10:12 2008/12/12 10:12
    Trackback Address:이 글에는 트랙백을 보낼 수 없습니다
    1. Blog Icon
      이네스

      재미있는 광고로군요.

    간만에 웃겨 주시는군요,

    요즘 격무에 시달리느라 웃을일이 거의 없는데..
    간만에 한번 웃겨 주시는군요.. 하시는 행동, 하시는 말씀마다 허탈한 미소를 짓게 하는것도 능력이라면
    능력이겠죠..

    http://news.naver.com/main/read.nhn?mode=LS2D&mid=sec&sid1=100&sid2=264&oid=020&aid=0002010322

    이런 코메디는 두고두고 봐야지..



    사용자 삽입 이미지
    2008/12/10 13:38 2008/12/10 13:38
    Trackback Address:이 글에는 트랙백을 보낼 수 없습니다

    Silverlight for Linux: Moonlight 1.0 Beta 1 Is Available for Download


    Moonlight
    는 Linux와 Unix/X11에서 Microsoft사의 Silverlight를 구동케 하기위한 open source 구현체입니다.
    Moonlight는 2007년 9월부터 Novell사의 후원으로 Mono project에 의해 개발되어 왔으며, Moonlight 1.0 beta 1
    릴리즈하였습니다.

    Novell사와 Mono Project팀은 32bit/64bit 리눅스 시스템에서 구동 가능한 Moonlight 1.0 beta 1의 출시를 발표했습니다.
    현재는 SUSE Linux Enterprise Desktop 10, openSUSE 11.0, Ubuntu 8.04, Fedora Core 9 for 32 bit machines,
    SUSE Linux Enterprise Desktop 10 and openSUSE 11.0 for 64 bit machines 을 지원하며, 윈도우즈가 아닌
    OS에서의 실행을 위해 FireFox 3을 추천하고 있습니다.

    Moonlight 1.0은 2009년 1월 20일 출시를 목표하고 있으며, 여기에는 Video/Audio 재생을 위한 Media Pack 1.0,
    실버라이트 2.0 의 스트리밍외에도 다음과 같은 사양이 포함됩니다.
    실버라이트 1.0 호환.
    브라우저의 JavaScript 이용 가능.
    C/C++ 기반의 no managed code.
    Linix/x86 Linux/x86-64 에서 실행 가능.
    소스코드도 함께 배포.


    Moonlight 2.0은 2009년 4월 Beta, 2009년 9월 정식버전 출시를 계획하고 있습니다.
    이 구현체에는 다음과 같은 사양이 포함됩니다.
    실버라이트 2.0 호환.
    마이크로소프트 Media Pack 2.0을 이용한 비디오/오디오 재생
    c#, DLR-based languages 실행을 위한 Mono를 포함.
    실버라이트 2.0 기반 어플리케이션과 실버라이트 2.0 MS-PL 컨트롤의 실행.

    Monolight에서 멀티미디어 stack의 구동방식은 Miguel de Icaza의 blog를 참조하실 수 있습니다.

    소스 코드는 이하의 SVN을 통해 내려 받으실 수 있습니다.
    svn co svn://anonsvn.mono-project.com/source/tags/moon/1.0b1
    해당 소스 코드의 라이센스는 마이크로소프트사의 약속이 계속되는 한 GNU LGPL을 따른다고 합니다.

    2008/12/07 13:58 2008/12/07 13:58
    Trackback Address:이 글에는 트랙백을 보낼 수 없습니다