*.jsp를 WEB-INF 아래에 숨겨라.

관련글 : http://wiki.apache.org/struts/StrutsCatalogHidingPagesUnderWEBINF

Struts 등의 MVC 패턴 프레임웍을 사용할 경우에는 컨트롤러가 호출하는 자바 클래스에서 로직 처리를 끝내고서 JSP파일로 포워딩을 한다.

여기서 JSP파일은 실제로 웹 브라우저의 주소창에 나타나지 않는다.

포워딩을 할 경우 포워딩 시키기 전에 웹브라우저가 호출한 주소가 남아 있고, 포워딩된 주소는 단지 서버측에서 실행되어 결과만을 웹브라우저로 전달한다.

JSP/Servlet 컨테이는(앞으로는 웹 컨테이너)는 WEB-INF 디렉토리 이하를 보안상의 문제로 웹 브라우저를 통한 접근을 금지하고 있다. 하지만 포워딩을 통한 접근은 웹 브라우저를 통하지 않기 때문에 가능하다.

MVC 패턴에서 뷰로 사용되는 JSP 페이지들은 컨트롤러를 통하지 않고서 직접 액세스 될 필요가 전혀 없고 어떤 경우에는 그렇게 되면 안되는 때도 있다.

그래서 뷰로 사용되는 JSP 페이지를 WEB-INF 아래에 두는 것을 권장하는 것 같다.
그럴 경우, 결코 웹 브라우저를 통한 직접 액세스가 불가능하므로, 컨트롤러를 통해서 액세스 됨을 보장할 수 있기 때문이다.

WEB-INF 아래에 두는것 외에도 *.jsp 접근을 막는 방법이 또 있다.
<!-- 브라우저로 접속한 사용자가 JSP 파일로 직접 접근할 수 없게 한다. -->
<security-constraint>
    <web-resource-collection>
        <web-resource-name>PreventViewingJSPs</web-resource-name>
        <description>브라우저로 접속한 사용자가 JSP파일로 직접 접근할 수 없도록 한다.</description>
        <url-pattern>*.jsp</url-pattern>
        <http-method>GET</http-method>
        <http-method>POST</http-method>
    </web-resource-collection>
    <auth-constraint>
        <role-name></role-name> <!-- 여기에 role-name을 적어도 된다. 존재하지 않는 것으로 -->
    </auth-constraint>
</security-constraint>

위와 같이하면 WEB-INF 상위에 있는 *.jsp 들에도 웹 브라우저에 주소를 쳐서 직접 접근은 막히게 된다. 컨트롤러를 통해 포워딩을해서 접근하는 방법 뿐이다.

또 다른 문제로, 로그를 웹 컨텍스트 디렉토리에 그대로 남기는 경우가 있는데, 절대로 그래서는 안 될 것 으로 보인다.
많은 사람들이 로그에 접속한 사람의 ID와 비밀번호, 그리고 주민등록번호등을 남기기도 하는데, 이것을 웝 컨텍스트 디렉토리에 둘 경우 우연찮게 유출될 가능성이 매우 높다. 로그 파일들도 WEB-INF 디렉토리 아래에 두거나, 아니면 웹 컨텍스트와 전혀 상관없는 디렉토리에 둬야 할 것으로 보인다.
제일 좋은 것은 웹 컨텍스트와 전혀 다른 디스크 파티션에 두는 것일 것 같다.

그렇게 하면 서로 다른 디스크를 사용하므로 시스템 성능 향상도 가져올 것이다.

by 권남 | 2005/03/03 23:01 | 프로그래밍 | 트랙백 | 덧글(1)

트랙백 주소 : http://kwon37xi.egloos.com/tb/2850553
☞ 내 이글루에 이 글과 관련된 글 쓰기 (트랙백 보내기) [도움말]
Commented by marlborogu at 2009/06/11 10:15
잘 읽었습니다.

:         :

:

비공개 덧글

◀ 이전 페이지          다음 페이지 ▶