클래식 ASP의 부모 경로는 기본적으로 비활성화 되어 있습니다.

등록일시: 2009-04-25 15:32,  수정일시: 2013-11-20 16:01
조회수: 18,026
이 문서는 IIS 기술을 널리 알리고자 하는 개인적인 취지로 제공되는 번역문서입니다. 이 문서에 대한 모든 저작권은 마이크로소프트에 있으며 요청이 있을 경우 언제라도 게시가 중단될 수 있습니다. 번역 내용에 오역이 존재할 수 있고 주석은 번역자 개인의 의견일 뿐이며 마이크로소프트는 이에 관한 어떠한 보장도 하지 않습니다. 번역이 완료된 이후에도 대상 제품 및 기술이 개선되거나 변경됨에 따라 원문의 내용도 변경되거나 보완되었을 수 있으므로 주의하시기 바랍니다.

클래식 ASP에서는 부모 경로 기능을 사용해서 ".." 문자열이 포함된 파일이나 폴더의 경로를 나타내는 상대 주소를 사용할 수 있었습니다. 가령, 다음 코드는 부모 경로를 사용하는 ASP 페이지에서 발췌한 것입니다:

<%
    Response.Write Server.MapPath("../example.asp")
%>

그리고, 다음 코드는 부모 경로에 존재하는 파일을 인클루드하는 ASP 페이지에서 발췌한 것입니다:

<!--#include file="../_fpclass/fpdblib.inc"-->

구버전의 IIS에서는 이런 부모 경로 기능이 기본적으로 활성화되어 있었습니다. 그러나, IIS 6.0부터는 보안과 디자인 측면을 감안하여 부모 경로 기능이 기본적으로 비활성되도록 변경되었는데, 그 이유는 부모 경로에서의 실행을 방지하고 보안 경계나 응용 프로그램 경계를 넘어서는 콘텐츠의 인클루드를 방지하기 위한 것입니다. IIS 7.0에서는 클래식 ASP 스크립트의 오류 메시지가 기본적으로 웹 브라우저에 전달되지 않는다는 점을 감안해 볼 때, 부모 경로를 사용하려고 시도하는 모든 코드는 다음과 같은 기본 오류 메시지를 웹 브라우저에 출력하게 됩니다:

An error occurred on the server when processing the URL. Please contact the system administrator.
If you are the system administrator please click here to find out more about this error.

노트: 이 기본 ASP 스크립트 오류 메시지는 관리자가 재정의 할 수 있습니다. 클래식 ASP 스크립트 오류 메시지에 대한 보다 자세한 정보는 클래식 ASP 스크립트 오류 메시지가 웹 브라우저에 기본으로 표시되지 않습니다. 문서를 참고하시기 바랍니다.

그러나, ASP의 스크립트 오류 메시지를 웹 브라우저로 전송하도록 속성을 활성화시킨 다음, 클래식 ASP 스크립트에서 부모 경로를 맵핑하려고 시도하면, 웹 브라우저에 다음과 같은 오류 메시지가 출력될 것입니다:

Server.MapPath() error 'ASP 0175 : 80004005'
Disallowed Path Characters
/test/example.asp, line 100
The '..' characters are not allowed in the Path parameter for the MapPath method.

그리고, 클래식 ASP 스크립트에서 부모 경로를 사용해서 파일을 인클루드하려고 하면 웹 브라우저에 다음과 같은 오류 메시지가 출력될 것입니다:

Active Server Pages error 'ASP 0131'
Disallowed Parent Path
/test/example.asp, line 100
The Include file '../_fpclass/fpdblib.inc' cannot contain '..' to indicate the parent directory.

사용자 접근 제어

본문의 내용들을 따라해보려면 관리자 권한을 갖고 있는 계정을 사용해야 합니다. 다음과 같은 두 가지 방법 중, 한 가지를 사용합니다:

  • 로컬 관리자 계정으로 컴퓨터를 사용합니다.
  • 만약, 관리자 권한을 갖고 있는 계정을 사용하고는 있지만 로컬 관리자 계정은 아닌 경우, 응용 프로그램을 실행하거나 명령 프롬프트를 열 때, "관리자 권한으로 실행" 옵션을 사용해서 실행합니다.

이런 준비가 필요한 이유는 윈도우 비스타와 윈도우 서버 2008의 사용자 접근 제어(UAC) 구성 요소가 IIS 7.0의 구성 설정에 대한 관리상의 접근을 제한하기 때문입니다. 사용자 접근 제어에 대한 보다 자세한 내용은 다음 문서를 참고하시기 바랍니다:

부모 경로 해석 이슈

가상 경로 사용

부모 경로 기능 비활성화에 따른 대안 중 하나로, 부모 경로 기능을 활성화시키는 대신 ASP 코드에서 가상 경로를 사용하는 방법이 있습니다. 가상 경로를 사용하는 경우, 웹 사이트 루트에 대한 URL의 전체 폴더 경로를 입력해야 합니다. 이를테면 다음과 같습니다:

  • 경로 맵핑
    <%
        Response.Write Server.MapPath("/test/example.asp")
    %>
  • 인클루드 경로
    <!--#include virtual="/_fpclass/fpdblib.inc"-->

클래식 ASP 부모 경로 활성화

또는, IIS 관리자를 사용하면 부모 경로 기능 자체를 활성화시키거나 비활성화시킬 수 있습니다. IIS 관리자를 실행하고 클래식 ASP 스크립트 오류 메시지를 제어할 사이트나 응용 프로그램을 선택한 다음, "ASP" 기능 아이콘을 마우스로 더블 클릭합니다.

그리고, ASP 기능의 속성 목록에서 "부모 경로 사용 (Enable Parent Paths)" 속성값을 원하는 값으로 설정합니다.

이 속성값은 명령 프롬프트 도구인 AppCmd.exe를 사용해서 다음 명령어로 설정할 수도 있습니다:

appcmd.exe set config "Default Web Site" -section:system.webServer/asp /enableParentPaths:"False" /commit:apphost

추가 정보

클래식 ASP 관련 옵션에 대한 보다 다양한 정보는 마이크로소프트에서 제공하는 IIS.net 웹 사이트의 IIS 구성 설정 레퍼런스를 참고하시기 바랍니다:

그리고, IIS 6.0의 부모 경로에 관한 추가적인 정보는 다음의 마이크로소프트 기술 자료 문서를 참고하시기 바랍니다: