IIS를 사용하는 Microsoft ASP.NET 2.0 멤버/역할 관리, 1부: 보안 및 구성 개요

 

피터 켈너
http://PeterKellner.net

2005년 11월

적용 대상:
   Microsoft ASP.NET 2.0
   Microsoft Visual Studio 2005
   Microsoft 인터넷 정보 서비스

요약: Peter Kellner가 Microsoft ASP.NET 2.0 멤버 자격 데이터베이스를 관리하는 애플리케이션을 만드는 방법을 살펴보는 두 문서 중 첫 번째 문서입니다. 이 문서에서는 적절한 관리자만 이 데이터에 액세스할 수 있도록 솔루션을 보호하는 방법을 살펴봅니다. (7페이지 인쇄)

콘텐츠

요약
소개
보안 고려 사항
ASP.NET 2.0 웹 사이트의 Role-Based 보안
결론

요약

이 문서는 ASP.NET 멤버 자격 및 역할을 관리하기 위한 3계층 솔루션의 보안 사용 및 설정을 설명하는 두 문서 중 첫 번째 문서입니다. 이 첫 번째 문서에서는 이 솔루션을 구성, 사용 및 가장 중요하게 보호하는 데 중점을 두고 일반적인 Microsoft ASP.NET 2.0 웹 솔루션에서 구현할 수 있는 방법에 대한 개요를 제공합니다. MembershipRoles 개체는 내부 구조를 자세히 살펴보지 않고 작동하는 것으로 처리됩니다. 멤버 및 역할을 관리하는 것은 간단한 데이터 원본에서 데이터를 관리하는 것과 다르지 않습니다. 두 번째 문서에서는 개발자가 유사한 기술을 사용하여 자체적으로 빌드할 수 있도록 이러한 컨트롤 및 개체의 내부를 충분히 자세히 설명합니다.

소개

ASP.NET 2.0은 사용자 인증을 애플리케이션 프로그래밍 도메인으로 직접 확장합니다. 개발자는 표준 .NET 라이브러리 참조(system.web.security)를 사용하여 추가 작업이 거의 없는 애플리케이션에 전체 인증을 빌드할 수 있습니다. 이 점을 염두에 두고 빌드 중인 애플리케이션이 사용 중에 보안이 손상되지 않을 가능성을 최소화하려면 특정 수준의 실사가 필요하다는 점을 기억해야 합니다.

이 문서에서는 보안 메커니즘에 대한 개요를 제공하고 웹 애플리케이션에 대한 보안 환경을 만드는 데 필수적인 부분인 예제 보안 설정을 보여 줍니다. ASP.NET 2.0은 보안 요구 사항에 따라 필요하다고 간주되거나 필요하지 않을 수 있는 다양한 구성 옵션을 제공합니다. 이 문서에서는 이러한 구성 옵션의 장단점을 설명합니다.

보안 고려 사항

물리적 환경 보호

컴퓨터의 보안은 컴퓨터의 전면 패널 전원 스위치에서 종료되는 경우가 많습니다. OS 수준에서 시스템을 얼마나 잘 보호하든 물리적 보호는 필수적입니다. 컴퓨터에 물리적으로 액세스할 수 있는 사람은 항상 어떤 식으로든 무결성을 손상시킬 수 있다고 가정해야 합니다.

컴퓨터의 물리적 환경을 보호하기 위한 권장 모범 사례에 대한 자세한 내용은 Microsoft TechNet에서 이 문서를 검토하세요.

도메인 환경 보안

사용자 계정, 암호 및 권한을 설정하는 모범 사례를 따라야 합니다. 예를 들어 권한이 없는 사용자가 웹 애플리케이션에서 사용하는 보안 데이터가 포함된 데이터베이스에 직접 액세스할 수 있으면 애플리케이션이 손상될 수 있습니다.

컴퓨터의 도메인 환경 보호에 대한 자세한 내용은 Microsoft 보안 홈페이지의 다음 문서에서 매우 유용한 권장 사항과 팁을 제공합니다.

.NET 환경 보안

.NET 환경을 사용하면 코드 액세스 보안을 설정할 수 있습니다. 즉, 개별 시스템 및 애플리케이션 라이브러리를 서로 다른 신뢰 수준과 연결할 수 있습니다. 예를 들어 여러 웹 애플리케이션이 실행 중일 수 있는 공유 호스팅 환경에서 매우 중요할 수 있습니다. 다른 사용자가 잠재적으로 소유할 수 있는 각 웹 애플리케이션은 서로 격리 및 보호가 필요할 수 있습니다. 또한 이러한 격리가 없으면 각 웹 애플리케이션이 잠재적으로 중요한 시스템 기능에 영향을 줄 수 있습니다.

이 문서에서는 ASP.NET 사용자(IIS를 대신하여 실행되는 사용자)가 가장 높은 신뢰 수준으로 실행되고 있다고 가정합니다. 웹 애플리케이션이 전용 환경에서 실행 중인 경우일 수 있습니다. 코드 수준 보안을 사용하여 웹 서버의 보안을 강화하는 방법에 대한 자세한 내용은 MSDN 문서 ASP.NET 코드 액세스 보안 사용을 참조하세요.

Asp. NET과 IIS의 관계

ASP.NET IIS를 사용할 때 애플리케이션별 논리를 사용하는 Forms 인증의 세 가지 인증 공급자를 지원합니다. Passport 인증은 Microsoft에서 제공하는 중앙 집중식 인증 서비스입니다. 및 Windows 인증. IIS를 통해 직접 제공된 인증을 사용합니다. 이 문서에서는 ASP.NET 프로젝트에 대한 기본 인증인 Forms Authentication을 사용합니다. 인증 모드는 web.config 파일에 지정됩니다. 구문 선택 항목은 다음과 같습니다.

<authentication mode = "{Windows|Forms|Passport|None}">
</authentication>

사용자가 웹 클라이언트에서 로그인할 때 이어지는 흐름은 이 문서의 흐름 차트에 표시됩니다.

이 문서는 2001년에 작성되었으며 현재 배송 중인 IIS 6.0 이상이 아닌 IIS 5.1의 흐름과 함께 작성되었습니다.

Aa478958.membsec_fig01(en-us,MSDN.10).gif

그림 1. IIS와 ASP.NET 간의 보안 흐름

ASP.NET 2.0 웹 사이트의 Role-Based 보안

초기 설정 및 구성

Web.Config 파일/자주 변경되지 않는 항목

ASP.NET 2.0 웹 애플리케이션의 전체 실행에 영향을 주는 특정 매개 변수는 web.config 파일에 설정됩니다. 예제 매개 변수에는 멤버 자격 공급자(또는 데이터베이스), 필요한 암호의 강도 및 등록에 전자 메일이 필요한지 여부에 대한 참조가 포함됩니다. web.config 파일의 관련 섹션은 미니멀한 보안 구성에 대한 샘플 값과 함께 아래에 나와 있습니다. 자세한 내용은 Visual Studio 2005 도움말에 액세스하고 "멤버 자격 구성원"을 조회하여 찾을 수 있습니다. 각 보안 매개 변수는 자세히 설명되어 있습니다.

<providers>
 <remove name="AspNetSqlMembershipProvider"/>
 <add name="AspNetSqlMembershipProvider" 
   type="System.Web.Security.SqlMembershipProvider, 
   System.Web, Version=2.0.0.0, Culture=neutral, 
   PublicKeyToken=b03f5f7f11d50a3a" 
   connectionStringName="LocalSqlServer"  
   enablePasswordRetrieval="false" 
   enablePasswordReset="true" 
   requiresQuestionAndAnswer="true" 
   applicationName="/" 
   requiresUniqueEmail="false" 
   minRequiredPasswordLength="1" 
   minRequiredNonalphanumericCharacters="0" 
   passwordFormat="Hashed" 
   maxInvalidPasswordAttempts="5" 
   passwordAttemptWindow="10" 
   passwordStrengthRegularExpression=""
   commentTimeout=""/>
</providers>

위에 표시된 web.config 섹션 외에도 machine.config 멤버 자격과 연결된 데이터베이스에 대한 기본 연결 문자열을 포함합니다. web.config 다른 연결 문자열을 구성할 수 있습니다. 보안을 추가하려면 연결 문자열을 인코딩할 수 있으며 멤버 자격 데이터베이스 암호를 암호화할 수 있습니다. 이러한 장단분에 대해 설명하는 많은 기사가 작성되었습니다. Microsoft의 빠른 시작 가이드는 web.config 파일에서 암호화를 사용하는 방법에 대한 좋은 예제를 제공합니다.

Web.Config 파일/.aspx 페이지 보안

웹 애플리케이션의 각 웹 페이지에는 보안 수준이 할당될 수 있습니다. 이 작업은 페이지에 액세스하는 데 필요한 역할을 지정하여 수행됩니다. web.config 파일의 구문은 매우 간단합니다. 예를 들어 다음 web.config 코드 조각은 Role이 Administrator로 할당된 사용자만 MembershipGrid.aspx 웹 페이지에 액세스할 수 있도록 지정합니다.

<system.web>
  <location path="MembershipGrid.aspx" >
    <system.web>
      <authorization >
      <allow roles="Administrators"/>
      </authorization>
    </system.web>
  </location>
</system.web>

또는 예를 들어 하위 디렉터리의 모든 페이지에 특정 역할만 액세스할 수 있도록 지정하려면 web.config 파일입니다. 이 경우 ~/AdminDir 경로의 모든 파일은 관리자로 할당된 역할이 있는 사람만 액세스할 수 있습니다.

<system.web>
  <location path="AdminDir" >
    <system.web>
      <authorization >
      <allow roles="Administrators"/>
      </authorization>
    </system.web>
  </location>
</system.web>

Web.Config 파일/내부 .aspx 페이지 보안

이전에 설명한 것보다 더 세분화된 보안을 제공해야 하는 경우가 많습니다. 즉, 단추 또는 aspx 페이지와 같은 컨트롤을 보호해야 할 수 있습니다. 이렇게 하려면 영향을 받을 컨트롤과 연결된 특성을 프로그래밍 방식으로 변경해야 합니다. 예를 들어 사용자의 역할에 따라 삭제 단추를 숨겨야 하는 경우 수행해야 하는 두 가지 작업이 있습니다. 먼저 ShowButtonBasedOnRole 이라는 메서드를 웹 페이지의 codebehind 클래스에 추가해야 합니다. 사용자가 요청된 역할에 허용되는 경우 true 를 반환하고, 사용자가 요청된 역할에 포함되지 않은 경우 false 를 반환해야 합니다.

protected bool ShowButtonBasedOnRole(string RoleOfInterest)
{
return User.IsInRole(RoleOfInterest);   
}

그런 다음 실제 aspx 페이지에서 코드 숨김 메서드 ShowButtonBasedOnRole에 따라 단추의 표시 유형 특성을 설정해야 합니다. 단추의 실제 선언은 다음과 같습니다.

<asp:Button
 ID="Button1" runat="server" Text="Button"
 Visible='<%# (bool) ShowDeleteRowBasedOnRole("administrator") %>'> />

단추가 설정되는 여러 역할을 기반으로 하는 경우 전달된 매개 변수를 문자열로 변경할 수 있으며, 사용자가 해당 역할 중 하나에 할당되었는지 여부에 대한 답변으로 반환하기 전에 모든 역할을 확인할 수 있습니다.

멤버/역할 관리자 aspx 페이지 사용

이 프로젝트(Membership.aspx)에 포함된 aspx 페이지를 사용하려면 몇 가지 작업을 수행해야 합니다. 먼저 문서 프로젝트 파일의 두 데이터 클래스를 복사하여 대상 프로젝트의 app_code 디렉터리에 포함해야 합니다. 이 두 파일은 MembershipDataObject.cs 및 RoleDataObject.cs입니다. 그런 다음 aspx 파일 Membership.aspx 및 해당 codebehind 페이지 Membership.aspx.cs를 현재 프로젝트로 이동해야 합니다.

관리자 역할이 할당되지 않은 사용자가 이 페이지에 액세스하지 않도록 보호하는 것이 매우 중요합니다. 그렇지 않으면 모든 사용자가 다른 사용자의 로그온 정보를 수정할 수 있습니다. 이렇게 하려면 web.config 파일에서 Membership.aspx 페이지가 보호되어 있는지 확인합니다. 이를 수행하기 위한 web.config 파일의 샘플 줄은 다음과 같습니다.

<system.web>
  <location path="Membership.aspx" >
    <system.web>
      <authorization >
      <allow roles="Administrators"/>
      </authorization>
    </system.web>
  </location>
</system.web>

이제 페이지가 보호되었으므로 관리자가 현재 로그인한 사용자 계정에 대한 역할로 할당되지 않고는 이 페이지에 액세스할 수 없습니다.

이를 해결하는 가장 좋은 방법은 아래 코드를 한 번 실행한 다음 웹 서버에서 해당 코드를 제거하는 것입니다. 예를 들어 ASP.NET 웹 페이지의 페이지 로드 이벤트에 있을 수 있습니다. 그런 다음 이 페이지가 호출된 후 서버에서 페이지를 삭제합니다. 이 시점에서 멤버 자격 관리 페이지는 암호로 계정 관리자에 로그인해야만 액세스할 수 있습니다.

Roles.CreateRole("Administrator");
Roles.CreateRole("User");
Roles.CreateRole("Guest");
Membership.CreateUser("admin", "some strong password here");
Roles.AddUserToRole("admin", "Administrator");

결론

웹 사이트를 설정할 때 웹 사이트를 사용하고 관련 보안 요구 사항을 이해하는 사용자를 파악하는 것이 중요합니다. 예를 들어 외부 액세스 권한이 없고 중요한 데이터가 없는 회사의 내부 그룹에서 웹 사이트를 사용하는 경우 간단한 보안으로 충분할 수 있습니다. 즉, 암호화 없음, 느슨한 암호 제약 조건 등이 있습니다. 인증은 데이터를 입력하는 사용자를 추적하는 편리한 방법으로 사용할 수 있습니다. 반면에 웹 사이트가 인터넷에 있고 기밀 데이터를 처리하는 경우 가능한 한 사이트를 잠그고 인증된 사용자만 사이트에 액세스할 수 있도록 하는 것이 중요합니다.

이 문서에서는 ASP.NET 웹 사이트에 대한 보안을 설정하는 동안 고려해야 할 사항에 대한 간략한 소개를 제공했습니다. 웹 사이트에 로그인하는 사용자의 멤버 자격 및 역할 정보를 수정하기 위한 보안 페이지를 추가하는 방법을 보여 줍니다. 이 두 파트 시리즈의 다음 문서에서는 웹 사이트 개발의 보안 측면을 이해한다고 가정합니다. 그런 다음 멤버 자격 관리 페이지의 작동 방식을 자세히 설명합니다.

 

작성자 정보

Peter Kellner는 1990년에 73번가 어소시에이츠를 설립하여 전국 500명 이상의 고객에게 대학 클리닉 예약, 보험 회사 관리 및 턴키 의사 사무실 관리를 위한 시스템을 성공적으로 제공했습니다. 10년 후인 2000년, 73번가 어소시에이츠가 대형 보험 회사에 인수되었고, 피터는 독립 소프트웨어 컨설턴트로 새로운 경력을 쌓기 시작했습니다. 현재 그가 참여하고 있는 기술 중에는 ASP.NET, Oracle, Java, VOiP 및 곧 SQL Server. 일하지 않을 때, 베드로는 대부분의 여가 시간을 자전거로 보냅니다. 그는 전 세계에 걸쳐 자전거를 타고있다. 가장 최근에 그와 그의 아내 타미는 불과 27일 만에 캘리포니아에서 조지아까지 미국을 가로질러 갔습니다.

그의 블로그 사이트는 입니다 http://peterkellner.net. 이 문서와 다운로드 섹션에 게시된 코드를 찾을 수 있습니다.

© Microsoft Corporation. All rights reserved.