다음을 통해 공유


런타임에 웹 응용 프로그램 보안

업데이트: 2007년 11월

응용 프로그램을 개발하려면 하나의 보안 문제 집합을 사용하여 작업해야 합니다. 일반적으로 웹 보안 토론에 더 탁월한 다른 문제 집합은 배포 및 실행할 때 응용 프로그램의 보안을 해결합니다.

정의에 따라 웹 응용 프로그램에서는 사용자가 중앙 리소스인 웹 서버에 액세스할 수 있고 이를 통해 데이터베이스 서버 같은 다른 리소스에도 액세스할 수 있습니다. 적합한 보안 방법을 이해하고 구현하여 다음을 수행할 수 있습니다.

  • 무단 액세스로부터 리소스를 보호합니다.

  • 사용자 또는 역할을 사용하여 액세스 수준을 제한합니다.

  • 데이터 무결성 및 기밀성을 설정하여 사용자가 편리하게 응용 프로그램으로 작업할 수 있는 보안 환경을 제공합니다.

  • 응용 프로그램이 제한된 리소스에 액세스하는 방법을 제어합니다.

  • 응용 프로그램 코드가 제대로 실행되게 합니다.

이 항목에서는 이러한 목표를 수행하는 방법에 대한 일반적인 정보를 제공하며 관련 기술에 대한 자세한 정보를 얻을 수 있는 추가 항목 링크를 제공합니다.

다음과 같은 유형의 보안 기능을 사용하여 무단 액세스로부터 응용 프로그램을 보호할 수 있습니다.

  • 일반적인 웹 서버 기능의 일부인 IIS(인터넷 정보 서비스)에서 제공하는 보안 기능. 여기에는 Windows 파일, 컴퓨터 및 사용자 수준 보안이 포함됩니다.

  • ASP.NET 응용 프로그램에서 빌드할 수 있으며 응용 프로그램별 수준의 액세스를 제공할 수 있는 보안

ASP.NET의 보안 프로세스

IIS에서는 웹 사이트에 대한 다양한 보안 옵션을 제공합니다. 그러나 IIS 보안 메커니즘은 매우 일반적이어서 모든 응용 프로그램에 대해 같은 메커니즘이 사용됩니다. 또한 Windows 통합 보안 사용과 같은 IIS 보안 옵션은 경우에 따라 응용 프로그램에서 사용하지 못할 수도 있습니다. 그러나 인트라넷 응용 프로그램의 경우에는 간단하게 Windows 통합 보안을 사용할 수 있습니다.

따라서 응용 프로그램의 특정 부분에 액세스할 수 있게 하려면 ASP.NET 보안을 사용하면 됩니다. ASP.NET 보안은 IIS 보안과 함께 사용되지만 사용자 자격 증명을 가져오는 방법과 같은 기능을 사용자 지정할 수 있도록 IIS 보안을 확장합니다.

IIS는 클라이언트로부터 먼저 요청을 받아 IIS 관리 도구를 사용하여 응용 프로그램에 설정한 보안을 검사합니다. 예를 들어, IIS에서 익명 액세스를 허용하도록 응용 프로그램을 구성하면 IIS가 자격 증명 확인을 수행하지 않습니다. IIS는 인증의 초기 검사를 수행한 다음, 두 번째 수준의 검사를 수행할 수 있도록 요청을 ASP.NET으로 보냅니다. ASP.NET을 사용하면 여러 가지 조건을 사용하여 응용 프로그램에 액세스 제한을 지정할 수 있습니다. 특정 페이지나 특정 사용자 등에 대해 액세스를 제한할 수 있습니다.

인증

다음 표에서는 ASP.NET에서 지원되는 인증 방법에 대해 설명합니다. 이 중에서 몇 가지 방법은 IIS 인증과 중복됩니다. 자세한 내용은 ASP.NET 인증을 참조하십시오.

인증 유형

설명

익명 액세스

공용 웹 응용 프로그램과 같이 알 수 없는 사용자가 요청할 수 있는 응용 프로그램에 대해 사용합니다. IIS와 겹쳐집니다.

기본 및 다이제스트 인증

(IIS 보안 옵션) 이 시나리오에서는 자격 증명이 없는 사용자에게 사용자 이름과 암호를 입력하라는 메시지가 나타납니다.

Windows 통합 보안(NTLM 보안이라고도 함)

(IIS 보안 옵션) 요청하는 사용자가 Windows 기반 네트워크에서 이미 인증되어 있으면 리소스에 대한 액세스를 요청할 때 IIS에서 사용자의 자격 증명을 전달할 수 있습니다.

인증서 인증

(IIS 보안 옵션) 이 시나리오에서 클라이언트는 타사에서 제공한 인증서, 즉 디지털 ID를 갖고 있습니다. 클라이언트 인증서에 매핑된 ID가 ASP.NET에 전달됩니다.

Kerberos

(IIS 보안 옵션) Kerberos 인증 프로토콜은 KDC(Key Distribution Center)라고 하는 네트워크 인증 서비스와 클라이언트 간의 상호 작용을 정의합니다. Windows 2000 및 2003에서는 KDC를 각 도메인 컨트롤러의 인증 서비스로 구현합니다.

Windows 인증

(ASP.NET 보안 옵션) 앞에 나온 IIS 보안 옵션과 통합됩니다. ASP.NET에서는 IIS에서 만든 보안 토큰을 가져온 다음, 현재 HttpContextUser 속성 값으로 설정된 WindowsPrincipal 개체로 사용합니다.

폼 인증

(ASP.NET 보안 옵션) 사용자를 인증해야 하는 경우 ASP.NET에서 요청을 특정 페이지로 리디렉션합니다. 이 페이지에는 보통 사용자 이름 정보를 얻을 수 있는 폼이 있습니다. 보안성을 높이기 위해 HTTPS 프로토콜을 사용하여 폼을 교환할 수 있습니다. 응용 프로그램이 폼 정보를 받으면 사용자의 자격 증명에 대해 응용 프로그램별 검사를 수행합니다. 중요한 점은 인증 프로세스가 IIS와는 달리 사용자 지정할 수 있다는 점입니다. 폼의 모양과 사용자 정보를 저장하는 방법을 지정할 수 있습니다.

사용자가 인증되면 ASP.NET이 다음에 액세스할 때 사용자를 식별하도록 토큰이 포함된 암호화된 쿠키를 발행합니다.

폼 인증은 사용자가 인증되는 방식을 효과적으로 제어하고 인증을 브라우저의 토큰에 저장할 수 있는 기능을 제공하므로 ASP.NET 응용 프로그램에 대해 가장 쉽게 선택할 수 있는 인증 방법입니다.

IIS 보안에 대한 자세한 내용은 Microsoft TechNet 웹 사이트의 Windows Server TechCenter for IIS에서 액세스 제어 항목을 참조하십시오. ASP.NET 인증에 대한 자세한 내용은 ASP.NET 인증을 참조하십시오.

Windows Server 2003 도메인 환경에서 프로토콜 전환 및 제한된 위임과 함께 폼 인증을 사용하는 방법에 대한 자세한 내용은 Kerberos Protocol Transition and Constrained Delegation을 참조하십시오.

권한 부여

웹 응용 프로그램이 실행되면 웹 서버 뿐만 아니라 다른 프로세스에서도 데이터베이스 등의 리소스를 요청합니다. ASP.NET 프로세스는 사용자 컨텍스트에서 실행되는데, 이 컨텍스트는 응용 프로그램에서 이러한 리소스를 요청하는 방법을 결정합니다. ASP.NET 프로세스는 Windows 2000 및 Windows XP Professional Edition에서 ASPNET(기본값)이라는 특수 로컬 사용자로 실행되거나, Windows 2003에서 ASP.NET 응용 프로그램에 대한 응용 프로그램 풀의 ID(기본적으로 로컬 NETWORK SERVICE 계정)로 실행됩니다. 이러한 계정은 제한된 권한으로 실행됩니다. ASP.NET 프로세스에 대해 관리자 컨텍스트에서 응용 프로그램을 실행하는 로컬 SYSTEM 계정 또는 자격 증명이 명시적으로 제공된 사용자(권장되지 않음) 등을 포함한 다른 사용자 컨텍스트를 지정할 수 있습니다.

ASP.NET 응용 프로그램에서는 다른 사용자가 다른 리소스에 대해 인증된 액세스를 갖도록 지정할 수 있습니다. 응용 프로그램에서 Windows 인증을 사용하면 Windows 사용 권한을 사용하여 서버에 있는 특정 파일이나 폴더에 액세스할 수 있는 권한을 부여할 수 있습니다.

또는 URL 기반의 권한 부여 방법을 사용하여 여러 가지 조건에 따라 권한이 부여되거나 거부되게 할 수 있습니다.

  • 사용자가 제공한 자격 증명을 기준으로 한 특정 사용자 또는 ID

  • 여러 사용자가 공통된 역할 또는 기능을 기준으로 사용 권한을 공유하도록 정의된 역할

  • 응용 프로그램의 일부에 액세스하기 위한 HTTP 프로세스(예: GET 및 POST)인 동사

예를 들어, 모든 사용자가 응용 프로그램에서 GET 동사 수행하여 페이지를 가져올 수 있지만 특정 사용자만 페이지를 게시하도록 지정할 수 있습니다. 마찬가지로 모든 사용자가 페이지를 GET하도록 허용하지만 특정 역할에게만 게시 권한을 거부하도록 지정할 수 있습니다.

응용 프로그램에 대해 전체적으로 또는 디렉터리 별로 URL 권한을 부여할 수 있습니다. 일반적으로 모든 사용자에게 공용 디렉터리의 페이지를 볼 수 있도록 허가하고 다른 디렉터리에 있는 제한된 페이지는 특정 사용자 또는 역할에게만 허가할 수 있습니다.

참고:

기본적으로 이미지와 스타일시트 같은 정적 파일은 IIS를 통해 제공되는 경우 ASP.NET 권한 부여 과정이 필요하지 않습니다. 일부 사용자는 정적 파일에 액세스할 수 없게 하려면 IIS 보안 기능을 사용하여 이러한 파일에 대한 액세스를 제한할 수 있습니다. 정적 파일은 ASP.NET 권한 부여 과정을 필요로 하고, 정적 파일에 익명으로 액세스할 수 없는 경우에는 이러한 파일이 익명 사용자에게 제공되지 않으므로 ASP.NET Development Server를 사용하여 ASP.NET 응용 프로그램을 테스트할 때 동작이 다름을 확인할 수 있습니다. 또는 IIS의 정적 파일 이름 확장명을 ASP.NET ISAPI 확장에 매핑할 수 있으며 이런 경우에는 ASP.NET 권한 부여 규칙이 적용됩니다.

자세한 내용은 ASP.NET 권한 부여웹 응용 프로그램의 기본 보안에 대한 유용한 정보를 참조하십시오.

ASP.NET 구성 파일

Web.config 파일의 설정을 사용하여 ASP.NET 보안을 구성합니다. 이 파일을 사용하면 인증 및 권한 부여의 부분을 비롯하여 여러 가지 보안 옵션에 미리 정의된 요소를 포함시킬 수 있습니다. Web.config 파일의 관련 섹션은 다음과 같습니다.

<configuration>
  <system.web>
    <authentication mode="Forms">
      <forms loginUrl="login.aspx" />
    </authentication>
    <authorization>
      <deny user="?" />
    </authorization>
  </system.web>
</configuration>

응용 프로그램에 두 개 이상의 구성 파일을 포함시킬 수 있습니다. 기본적으로, 응용 프로그램 루트에는 응용 프로그램의 보안을 전체적으로 지정하는 구성 파일이 있습니다. 즉 보안 설정이 하위 폴더 별로 상속됩니다. 그러나 각 폴더에 해당 폴더의 보안 설정을 작성하여 구성 파일을 만들 수 있습니다.

자세한 내용은 ASP.NET 아키텍처를 참조하십시오.

XML Web services 보안

.asmx 파일을 사용하는 XML Web services는 ASP.NET을 사용하는 웹 응용 프로그램으로 실행되므로 모든 ASP.NET 응용 프로그램과 같은 보안 모델에 참여합니다. 예를 들어, 기본 인증 또는 Windows 통합 보안을 사용하도록 XML Web services를 구성할 수 있습니다.

디자인 타임에 XML Web services에 참조를 추가하려고 할 때, 즉 XML Web services의 검색 문서를 요청할 때는 XML Web services에서 구성 방법에 따라 표준 웹 응용 프로그램 인증을 수행합니다. 예를 들어, 기본 인증을 사용하도록 XML Web services를 구성하면 요청한 클라이언트로부터 사용자 이름과 암호를 받게 됩니다. XML Web services에서 기본 인증을 사용하는 경우에는 웹 참조 추가 대화 상자에 자격 증명을 요청하는 메시지가 나타납니다.

XML Web services 호출을 포함하는 응용 프로그램을 빌드할 때는 호출하기 전에 해당 자격 증명이 있는지 확인해야 합니다. 적절한 자격 증명이 없다면 호출이 실패합니다. 런타임에 해당 메서드를 호출하기 전에 XML Web services를 나타내는 클라이언트측 개체의 Credentials 속성을 설정하여 XML Web services에 자격 증명을 전달할 수 있습니다.

다른 ASP.NET 보안 옵션은 유연성이 떨어질 수 있으므로 XML Web services에서 자격 증명 정보가 SOAP 헤더로 전달되도록 사용자 지정 인증 솔루션을 구현할 수 있습니다. 이 솔루션에서 자격 증명은 클라이언트와 서버 간에 교환되는 메시지의 선택적 부분으로 전달됩니다. 그런 다음 헤더의 정보를 수신하여 인증 코드를 호출할 수 있는 사용자 지정 HTTP 모듈(IHttpModule 인터페이스 구현)을 작성할 수 있습니다.

다른 ASP.NET 응용 프로그램처럼 XML Web services는 특정 역할 기반의 인증을 구현하여 응용 프로그램의 특정 부분에 대한 액세스를 제한할 수 있습니다.

자세한 내용은 XML Web services 인프라ASP.NET을 사용하여 만든 XML Web services 보안을 참조하십시오.

데이터 무결성 및 기밀성 설정

인증 및 권한 부여는 사용자의 신원과 해당 사용자가 액세스할 수 있는 리소스를 정의합니다. 이러한 보안 기능은 주로 웹 응용 프로그램이 무단 사용되지 않도록 보호하는 데 사용됩니다.

그러나 사용자의 정보를 보호하고, 사용자가 중요한 정보를 안전하게 교환할 수 있는 환경을 만드는 것도 보안의 기능입니다. 예를 들어, 응용 프로그램에서 사용자에게 신용 카드나 다른 계정 번호, 개인 정보 또는 기타 사용자가 공개를 꺼려하는 데이터를 물어보는 경우 이 정보를 안전하게 전달할 수 있는 방법을 제공해야 합니다.

IIS에서 SSL(Secure Sockets Layer)을 사용하면 암호화된 정보를 HTTPS 프로토콜을 통해 교환할 수 있습니다. SSL은 양방향 암호화를 제공합니다. 즉, 암호화를 사용하여 사용자에게 정보가 전송되고 사용자가 응용 프로그램에 게시하는 정보도 마찬가지로 암호화됩니다.

SSL 및 암호화 설정

SSL 및 암호화를 사용하려면 회사나 ID에 서버 인증서가 있어야 합니다. 인증서는 가장할 수 없는 방법으로 사이트를 식별하는 디지털 서명입니다. 인터넷(공용) 응용 프로그램에서는 많이 알려진 타사 인증서 인증 기관으로부터 서버 인증서를 받습니다. 개인(인트라넷) 응용 프로그램의 경우에는 서버 인증서를 직접 발행할 수 있습니다. 이러한 방법을 사용하여 개인 사이트와 같은 내부 응용 프로그램을 보호할 수 있습니다.

서버 인증서를 사용하면 브라우저 사용자와 SSL 방식으로 암호화된 연결을 설정할 수도 있습니다. SSL은 public key encryption라는 암호화 방법을 사용합니다. 이 암호화 형태에는 데이터를 암호화하는 공개 키와 보안을 유지하고 공개 키로 암호화된 정보를 해독하는 개인 키가 있습니다. 서버 인증서에는 공개 키가 포함됩니다. 사용자가 SSL을 사용하려고 하면 응용 프로그램에서 인증서와 공개 키를 브라우저로 보냅니다. 그러면 브라우저와 서버에서 공개 키를 사용하여 정보 교환을 암호화할 방법을 설정합니다.

참고:

SSL을 사용하려면 브라우저에서 40비트 이상의 암호화 키를 지원해야 합니다. 이 수준은 대부분의 브라우저에서 사용할 수 있습니다. 그러나 키 길이를 이렇게 설정하면 안전하지 않습니다. IIS에서 키 길이가 128비트인 SSL 연결만 허용하도록 응용 프로그램을 구성할 수도 있습니다.

서버 인증서를 얻었으면 https://를 웹 페이지를 얻어 게시하기 위한 접두사로 사용하여 사용자에게 SSL을 사용하도록 지시할 수 있습니다. IIS에서 HTTPS 연결만 허용하도록 웹 사이트를 구성할 수도 있습니다. IIS와 브라우저는 자동으로 암호화된 채널을 사용하여 정보를 교환합니다.

SSL을 사용하는 방법에 대한 자세한 내용은 Microsoft 기술 자료에서 Q307267, "How to: Secure XML Web Services with Secure Sockets Layer in Windows 2000" 문서를 참조하십시오. 암호화에 대한 자세한 내용은 암호화 개요를 참조하십시오. 인증서 및 SSL 구성에 대한 내용은 Microsoft TechNet 웹 사이트의 Windows Server TechCenter for IIS를 참조하십시오.

.NET 코드 보안 사용

마지막으로 응용 프로그램의 코드가 적절하지 않은 컨텍스트에서 실수로 실행되거나 악의적인 방식으로 사용되는 등 잘못 사용되지 않도록 보호할 수 있는 방법을 적용하여 보안을 유지해야 합니다. ASP.NET은 .NET Framework의 일부이므로 코드 액세스 보안을 사용하여 코드에 허용할 권한을 설정할 수도 있습니다. 자세한 내용은 코드 액세스 보안을 참조하십시오.

참고 항목

개념

웹 응용 프로그램의 기본 보안에 대한 유용한 정보