2005년 03월 03일
*.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 접근을 막는 방법이 또 있다.
위와 같이하면 WEB-INF 상위에 있는 *.jsp 들에도 웹 브라우저에 주소를 쳐서 직접 접근은 막히게 된다. 컨트롤러를 통해 포워딩을해서 접근하는 방법 뿐이다.
또 다른 문제로, 로그를 웹 컨텍스트 디렉토리에 그대로 남기는 경우가 있는데, 절대로 그래서는 안 될 것 으로 보인다.
많은 사람들이 로그에 접속한 사람의 ID와 비밀번호, 그리고 주민등록번호등을 남기기도 하는데, 이것을 웝 컨텍스트 디렉토리에 둘 경우 우연찮게 유출될 가능성이 매우 높다. 로그 파일들도 WEB-INF 디렉토리 아래에 두거나, 아니면 웹 컨텍스트와 전혀 상관없는 디렉토리에 둬야 할 것으로 보인다.
제일 좋은 것은 웹 컨텍스트와 전혀 다른 디스크 파티션에 두는 것일 것 같다.
그렇게 하면 서로 다른 디스크를 사용하므로 시스템 성능 향상도 가져올 것이다.
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)







☞ 내 이글루에 이 글과 관련된 글 쓰기 (트랙백 보내기) [도움말]