BUG: Set-Cookie가 Location과 결합되면 CGI에서 무시된다

기술 자료 번역 기술 자료 번역
기술 자료: 176113 - 이 문서가 적용되는 제품 보기.
모든 사용자는 Microsoft Windows Server 2003에서 실행되는 Microsoft 인터넷 정보 서비스(IIS) 버전 6.0으로 업그레이드하는 것이 좋습니다. IIS 6.0을 사용하면 웹 인프라 보안이 크게 향상됩니다. IIS 보안 관련 항목에 대한 자세한 내용은 다음 Microsoft 웹 사이트를 참조하십시오.
http://www.microsoft.com/korea/technet/iis/default.asp
모두 확대 | 모두 축소

이 페이지에서

현상

CGI 응용 프로그램에서 "302 개체 이동" 응답과 함께 Set-Cookie 헤더와 Location 헤더를 보내면 Internet Information Server(IIS)에서 쿠키 헤더를 무시합니다.

해결 방법

이 동작은 "서버 지시문이 아닌 모든 헤더는 클라이언트로 직접 다시 전송됩니다. 현재 이 사양에서는 세 가지 서버 지시문을 정의합니다..."라는 CGI 사양을 위반합니다.

이 문제를 해결하려면 EXE의 파일 이름이 "nph-"로 시작되는지 확인하고 프로그램에서 모든 HTTP 헤더를 수동으로 만드십시오. "nph-"는 CGI 프로그램이 구문 분석되지 않은 헤더 모드에서 실행됨을 서버에 알립니다. CGI에는 두 가지 모드가 있습니다. 표준 모드(구문 분석된 헤더)에서는 CGI 지시문 중 하나를 표준 출력(Content-type, Location 또는 Status)으로 보내야 합니다. CGI에서는 사용자가 보낸 지시문에 따라 유효한 HTTP 응답 줄의 서식을 지정합니다. CGI에서는 사용자를 위해 다른 표준 HTTP 헤더의 서식을 지정하며 사용자가 지정한 다른 모든 헤더를 포함해야 합니다.

다른 모드는 구문 분석되지 않은 헤더 모드입니다. 이 모드에서는 CGI에서 헤더를 자체적으로 설정하지 않습니다. CGI 프로그램에서 응답 줄과 모든 헤더를 포함한 전체 HTTP 응답의 서식을 지정해야 합니다. 이 모드에서 서버는 사용자를 위해 헤더를 추가하거나 수정하지 않습니다.

규칙을 정리하자면, 이름이 "nph-"로 시작되는 CGI 프로그램은 구문 분석되지 않은 헤더 모드에서 실행되고 그렇지 않은 CGI 프로그램은 구문 분석된 헤더 모드에서 실행됩니다.

현재 상태

Microsoft는 본 문서의 시작 부분에 나열한 제품에서 이 문제를 확인했습니다.

추가 정보

문제를 재현하는 방법

이 CGI 프로그램을 Win32 콘솔 응용 프로그램으로 컴파일하여 IIS 서버에서 실행될 수 있는 폴더에 넣습니다.
#include <stdio.h>
int main()
{
  printf("Location: %s\r\n", "http://www.yahoo.com");
  printf("Set-Cookie: Name1=Value1; path=/;
    expires=Fri, 22 May 1998 21:00:00 GMT\r\n\r\n");
  return 0;
}
				

브라우저에서 CGI 프로그램을 호출하고 네트워크 모니터 등을 통해 출력을 관찰합니다. 출력은 다음과 유사합니다.
HTTP/1.0 302 Object moved
Location: http://www.yahoo.com
Server: Microsoft-IIS/2.0
Content-Type: text/html
Content-Length: 145

<head><title>문서가 이동되었습니다.</title></head>
<body><h1>개체가 이동되었습니다.</h1>
<a HREF="http://www.yahoo.com">여기</a>에서 이 문서를 찾을 수 있습니다.</body>
				

IIS에서 Set-Cookie 헤더를 설정하지 않았음을 확인할 수 있습니다. 브라우저에서 쿠기 경고가 설정되어 있으면 경고가 표시되지 않습니다.

쿠키가 302 응답에서 설정될 수 있도록 하려면 다음과 유사한 코드를 사용하고 실행 파일의 이름 앞에 "nph-"를 추가합니다.
#include <stdio.h>
int main()
{
  printf("HTTP/1.0 302 Redirect\r\n");
  printf("Location: %s\r\n", "http://www.yahoo.com");
  printf("Set-Cookie: Name=Value; path=/; expires=Fri, 22 May 1998 21:00:00
   GMT\r\n\r\n");
  return 0;
}
				

출력은 다음과 유사합니다. 쿠키가 이제 전송되었고 서버에서 헤더를 추가하지 않았음을 확인할 수 있습니다.
HTTP/1.0 302 Redirect
Location: http://www.yahoo.com
Set-Cookie: Name=Value; path=/; expires=Fri, 22 May 1998 21:00:00 GMT
				

참조

(c) Microsoft Corporation 1997, All Rights Reserved. Microsoft Corporation의 Leon Braginski 제공



Microsoft 제품 관련 기술 전문가들과 온라인으로 정보를 교환하시려면 Microsoft 뉴스 그룹에 참여하시기 바랍니다.

속성

기술 자료: 176113 - 마지막 검토: 2006년 11월 6일 월요일 - 수정: 4.2
본 문서의 정보는 다음의 제품에 적용됩니다.
  • Microsoft Internet Information Server 3.0
  • Microsoft Internet Information Server 4.0
  • Microsoft Internet Information Services 5.0
키워드:?
kbbug kbnofix KB176113

피드백 보내기

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com