ASP.NET 코드 액세스 보안

Visual Studio 2010

업데이트: 2007년 11월

ASP.NET을 사용하여 여러 웹 사이트를 호스팅할 때의 장점 중 하나는 CLR(공용 언어 런타임)가 코드 액세스 보안을 지원하므로 서버 응용 프로그램을 보호할 수 있다는 점입니다. 코드는 어셈블리의 강력한 이름이나 코드의 원본 URL과 같은 코드 원본에 대한 증명 정보를 기초로 보안 영역 분류에 지정됩니다.

완전 신뢰 수준으로 실행되는 응용 프로그램이라도 실행되고 있는 Windows 계정(ASP.NET 프로세스 ID)을 사용하여 NTFS 파일 권한, 데이터베이스 권한 등으로 제약될 수 있습니다. 자세한 내용은 ASP.NET 프로세스 ID 구성을 참조하십시오.

일반적으로 어셈블리를 강력한 이름의 어셈블리로 만들고 이 어셈블리에 대한 보안 정책을 추가하여 개별 어셈블리에 대한 코드 액세스 보안을 구성할 수 있습니다. 하지만 대부분의 ASP.NET 어셈블리는 페이지를 컴파일할 때 동적으로 생성되어 강력한 이름이 지정되지 않으므로 이러한 어셈블리에는 보안 정책을 간접적으로 구성해야 합니다. 또한 ASP.NET은 비컴파일 응용 프로그램을 지원하지 않으므로 어셈블리 기반 증명 정보는 지원되지 않습니다. ASP.NET 응용 프로그램에는 디렉터리 구조라는 개념이 포함되어 있으므로 .NET Framework를 개별 컴퓨터의 각 ASP.NET 응용 프로그램과 별개로 작동하도록 구성하는 것보다 ASP.NET 응용 프로그램의 범주를 기반으로 코드 액세스 보안을 구성하는 것이 훨씬 쉽습니다.

ASP.NET에서는 미리 정의된 권한 집합에 해당하는 구성 가능한 신뢰 수준을 각 응용 프로그램에 지정할 수 있습니다. 기본적으로 응용 프로그램에는 제시되는 증명 정보에 따라 신뢰 수준이 지정됩니다. Full 권한 집합보다 낮은 신뢰 수준으로 웹 응용 프로그램을 실행하려면 ASP.NET 신뢰 수준 및 정책 파일에 정의되어 있는 미리 정의된 신뢰 수준 중 하나를 사용하여 부분적인 신뢰 정책을 적용해야 합니다.

응용 프로그램 Web.config 파일에서 다음 구성 설정을 사용하여 기본 동작을 재정의하고 응용 프로그램을 특정 보안 정책에 연결할 수 있습니다.

<location path="SampleApp" allowOverride="false">
  <trust level="High" 
    originUrl="http://www.contoso.com"/>
</location>

trust 구성 요소는 컴퓨터 수준에 적용하여 모든 ASP.NET 응용 프로그램이 해당 신뢰 수준으로 실행되도록 할 수도 있고, 계층에서 임의의 응용 프로그램 루트 디렉터리에 적용하여 특정 ASP.NET 응용 프로그램에 신뢰 수준을 적용할 수도 있습니다. 전체 사이트에 대한 정책을 설정하려면 다음과 같이 사이트의 루트 응용 프로그램에 대한 Web.config 파일을 편집하여 사이트의 루트를 경로 위치로 지정합니다.

<location path="ContosoSite" allowOverride="false">
  <trust level="High" 
    originUrl="http://www.contoso.com"/>
</location>

신뢰할 수 있는 사이트에 대해서는 trust 구성 요소의 level 특성을 High로 설정하는 것이 좋습니다. 외부 고객의 코드를 실행하는 사이트를 호스팅하는 웹 서버와 같이 신뢰할 수 없는 사이트에 대해서는 trust 구성 요소의 level 특성을 Medium으로 설정하는 것이 좋습니다. Medium 신뢰 수준으로 ASP.NET 응용 프로그램을 실행하는 데 대한 자세한 내용은 Patterns and Practices (PAG): Security Guidance for Applications에서 "How To: Use Medium Trust in ASP.NET 2.0"을 참조하십시오.

시스템 또는 사이트 수준에서 신뢰 설정을 구성하는 경우에는 일반적으로 개별 응용 프로그램에서 자체 신뢰 수준을 지정하지 못하도록 location 요소의 allowOverride 특성을 false로 설정합니다. 일반적으로 공유 서버 설치에서는 이와 같이 설정합니다.

다음 표에는 trust 구성 요소에서 기본으로 지원되는 특성 목록이 나와 있습니다.

특성

설명

지원되는 값

level

응용 프로그램이 실행될 보안 영역을 지정합니다.

Full, High, Medium, LowMinimal

originUrl

System.Net 네임스페이스의 클래스를 사용하는 연결 액세스에 사용할 수 있는 URL 또는 URL 패턴을 지정합니다. 이 특성이 있는 경우 WebRequest 인스턴스와 같이 다양한 네트워크 위치로 연결할 수 있도록 하는 일부 개체의 권한 검사에 사용될 수 있습니다. 예를 들어, ASP.NET 페이지에서 웹 응용 프로그램과 같은 웹 팜에 배포된 웹 서비스를 호출할 수 있도록 이 특성을 웹 팜에 있는 서버의 호스트 이름으로 구성할 수 있습니다.

올바른 형식의 HTTP URL이거나, WebPermissionAttribute에서 지원하는 regex 기반 구문입니다.

다음 표에는 CLR에서 지원하는 권한 형식과 각 권한별로 여러 신뢰 수준에 대한 기본 정책이 나와 있습니다.

권한

Full

High

Medium

Low

Minimal

AspNetHostingPermission

Full

High

Medium

Low

Minimal

ConfigurationPermission

무제한

무제한

권한 없음

권한 없음

권한 없음

DnsPermission

무제한

무제한

무제한

권한 없음

권한 없음

EnvironmentPermission

무제한

무제한

Read: TEMP, TMP, OS, USERNAME, COMPUTERNAME

권한 없음

권한 없음

FileIOPermission

무제한

무제한

Read, Write, Append, PathDiscovery:응용 프로그램 디렉터리

Read, PathDiscovery:응용 프로그램 디렉터리

권한 없음

IsolatedStorageFilePermission

무제한

무제한

AssemblyIsolationByUser, 무제한 UserQuota

1MB UserQuota(개별 사이트에 따라 달라질 수 있음), AssemblyIsolationByUser

권한 없음

PrintingPermission

무제한

DefaultPrinting

DefaultPrinting

권한 없음

권한 없음

ReflectionPermission

무제한

ReflectionEmit

권한 없음

권한 없음

권한 없음

RegistryPermission

무제한

무제한

권한 없음

권한 없음

권한 없음

SecurityPermission

무제한

Execution, Assertion, ControlPrincipal, ControlThread, RemotingConfiguration

Execution, Assertion, ControlPrincipal, ControlThread, RemotingConfiguration

Execution

Execution

SmtpPermission

무제한

Connect

Connect

권한 없음

권한 없음

SocketPermission

무제한

무제한

권한 없음

권한 없음

권한 없음

WebPermission

무제한

무제한

원본 호스트에 대한 Connect(구성된 경우)

권한 없음

권한 없음

SqlClientPermission

무제한

무제한

무제한

권한 없음

권한 없음

Event Log

무제한

권한 없음

권한 없음

권한 없음

권한 없음

Message Queue

무제한

권한 없음

권한 없음

권한 없음

권한 없음

Service Controller

무제한

권한 없음

권한 없음

권한 없음

권한 없음

Performance Counters

무제한

권한 없음

권한 없음

권한 없음

권한 없음

Directory Service

무제한

권한 없음

권한 없음

권한 없음

권한 없음

권한 수준을 사용할 수 있지만 보안 정책에 권한 수준이 명시적으로 언급되지 않은 경우, Full 권한으로 실행되는 응용 프로그램은 항상 권한을 사용할 수 있습니다. 이보다 낮은 신뢰 수준으로 실행되는 응용 프로그램은 보안 정책을 수정하여 권한을 명시적으로 부여하지 않는 한 리소스를 사용할 수 없게 됩니다.

표에서 볼 수 있듯이 High 권한 집합을 가진 응용 프로그램은 응용 프로그램 디렉터리의 파일에 대한 읽기/쓰기 권한을 가지며, Low 신뢰 응용 프로그램은 응용 프로그램 디렉터리의 파일에 대한 읽기 전용 권한을 가집니다. FileIOPermission 형식은 c:\SampleAppPath와 같은 실제 경로에 의존하므로 ASP.NET에서는 런타임에 응용 프로그램에 대한 관련 경로 정보로 대체된 정책 파일에서 토큰화된 문을 사용합니다.

응용 프로그램은 WebPermission 형식을 통해 System.Net.WebRequest와 같은 클래스를 사용하여 원본 호스트 특성에 정의된 네트워크 위치에 연결할 수 있습니다. ASP.NET에서는 해당 응용 프로그램의 trust 섹션에서 선택적인 originUrl 특성을 지정하여 이 권한을 구성할 수 있습니다. originUrl 특성은 Web_hightrust.config 파일의 다음 섹션과 같이 정책 파일의 $OriginHost$ 변수를 대체합니다.

<IPermission class="WebPermission" version="1">
  <ConnectAccess>
    <URI uri="$OriginHost$"/>
  </ConnectAccess>
</IPermission>
표시: