웹 응용 프로그램 보안 소개

웹 응용 프로그램에서 보안은 중요한 부분입니다. 정의에 따라 웹 응용 프로그램에서는 사용자가 중앙 리소스인 웹 서버에 액세스할 수 있고 이를 통해 데이터베이스 서버 같은 다른 리소스에도 액세스할 수 있습니다. 적합한 보안 방법을 이해하고 구현하여 직접 리소스를 보호하고 사용자가 편리하게 응용 프로그램 작업을 할 수 있도록 보안 환경을 제공합니다.

이 항목에서는 웹 응용 프로그램의 보안에 대한 개요를 제공하고 Visual Studio로 응용 프로그램을 작성할 때 고려해야 할 사항에 대해 설명합니다. 또한 Microsoft IIS(인터넷 정보 서비스) 및 ASP.NET의 보안 기능에 대해 자세한 내용을 알려주는 추가 정보 링크도 제공합니다.

인증, 권한 부여 및 가장

보안 작업을 하려면 이러한 기본적인 보안 개념에 대해 이해하고 있어야 합니다.

  • 인증은 사용자의 신원을 확인하는 것입니다. 예를 들어, 사용자는 인증 기관(예: 데이터베이스 또는 Windows 도메인 서버)에 대해 확인된 사용자 이름과 암호를 제공해야 합니다.
  • 권한 부여는 특정 사용자에게 리소스에 대한 액세스를 허가하거나 거부하는 프로세스입니다.

이러한 개념은 Windows를 사용하면서 많이 들어온 것입니다. 모든 종류의 네트워크에는 로그인, 즉 자체 인증이 필요합니다. 로그인이 성공하면 특정 파일, 폴더, 프린터 및 기타 리소스에 액세스할 수 있습니다. 즉 로그인 자격 증명을 기준으로 리소스에 대한 액세스 권한을 부여받게 되는 것입니다. Windows에서는 관리자가 사용자 계정을 만들고 이러한 사용자에게 폴더, 파일 등에 대한 액세스 권한을 부여할 수 있는 정교한 보안 시스템을 제공합니다.

이러한 보안 요구 사항이 웹 응용 프로그램에도 있습니다. 그러나 웹 응용 프로그램의 공용 특성상 이 보안 요구 사항과 약간 다른 점이 있습니다. 예를 들어, 공용 웹 사이트에서는 모든 사용자가 웹 서버가 실행 중인 컴퓨터나 네트워크에 로그인할 필요가 없습니다. 이러한 시나리오에서는 웹 응용 프로그램이 사용자를 가장할 수 있습니다. 사용자에게 인증 자격 증명을 제공하도록 요청하지 않고 웹 응용 프로그램이 미리 작성된 자격 증명으로 리소스를 요청할 수 있습니다.

IIS 및 ASP.NET의 웹 응용 프로그램 보안

웹 응용 프로그램의 보안은 웹 서버(IIS)에서 시작합니다. Windows 기반 서비스인 IIS는 Windows 보안과 완전히 통합되어 있습니다. 다른 프로세스와 마찬가지로 파일에 액세스하려면 IIS에서 적절한 인증을 요청합니다. 사용자가 브라우저에서 IIS로 요청을 보내면 IIS가 Windows 폴더에서 파일을 읽어야 하며 Windows에서 정의된 인증이 파일과 IIS 요청에 적용됩니다. 즉, 리소스에 액세스하려면 다른 프로세스처럼 IIS에서 적절한 자격 증명을 제공해야 합니다.

웹 응용 프로그램이 실행될 때 이 응용 프로그램은 자체적인 보안 기능이 있는 ASP.NET에서 실행됩니다. 이 보안 기능은 응용 프로그램에서 리소스에 대한 액세스를 요구할 때 작동합니다. 예를 들어, 웹 응용 프로그램에서 파일을 읽거나 쓰고자 할 때 해당 요청의 성공 여부는 ASP.NET 보안 컨텍스트를 통해서 결정됩니다.

모든 사용자가 Windows 서버에 있는 파일을 읽을 수 있도록 인증된 것은 아니며 인터넷으로 공개적으로 사용할 수 있는 웹 응용 프로그램의 경우는 특히 더 그렇습니다. 따라서 IIS와 ASP.NET은 인증을 설정하기 위한 여러 가지 메커니즘을 제공합니다. 다음 설명에서는 이러한 방법에 대해 설명하는데 각 방법의 작동 방법에 대해 자세히 다루지는 않습니다. IIS 보안에 대한 자세한 내용은 Microsoft 웹 사이트(https://www.microsoft.com/windows2000/en/server/iis/)의 IIS 설명서에서 액세스 제어에 대한 항목을 참조하십시오. ASP.NET 보안에 대한 자세한 내용은 ASP.NET 웹 응용 프로그램 보안을 참조하십시오.

익명 액세스

알 수 없는 사용자가 요청을 하는 응용 프로그램의 경우(특히, 공용 웹 응용 프로그램) IIS는 인증 자격 증명이 없는 이른바 "익명" 사용자를 지원합니다. 이 시나리오에서 IIS가 실행 중인 서버에는 사용자 이름이 IUSR_<machinename>인 추가 Windows 사용자가 정의되어 있습니다. 이 사용자 계정은 일반적으로 매우 제한된 액세스 권한으로 정의되어 있습니다.

IIS가 알 수 없는 사용자로부터 요청을 받으면 이 요청을 <machinename>_anonymous 사용자 이름을 자격 증명처럼 사용하여 Windows로 보냅니다. 즉, IIS는 리소스에 액세스하기 위해 익명 사용자를 가장합니다.

기본 및 다이제스트 인증

IIS는 또한 웹 표준 기본 인증 모델을 지원합니다. 이 시나리오에서는 자격 증명이 없는 사용자는 사용자 이름과 암호를 제공하라는 메시지를 받게 됩니다. 이는 응용 프로그램에서 사용할 수 있는 IIS로 반환됩니다. 기본 인증은 공용 웹 응용 프로그램에 제한된 액세스를 제공할 때 유용한 방법입니다. 그러나 사용자가 사용자 이름과 암호를 일반 텍스트 형식으로 IIS에 전달하므로 보안성이 높지 않습니다.

다이제스트 인증은 기본 인증과 비슷하지만 암호화를 사용하여 사용자 정보를 서버로 보냅니다. 그러나 이 인증 스타일에는 Windows 도메인 컨트롤러가 필요합니다.

Windows 통합 보안

요청한 사용자가 Windows 기반 네트워크에서 인증되어 있으면 리소스에 대한 액세스를 요청할 때 IIS에서 사용자의 자격 증명을 전달할 수 있습니다. 자격 증명에는 사용자 이름과 암호가 포함되지 않고 사용자의 보안 상태를 나타내는 암호화된 토큰만 포함됩니다. 이 방법은 사용자가 응용 프로그램을 사용하기 전에 네트워크에 로그인하는 회사 인트라넷의 일반적인 시나리오입니다. 그러나 통합된 보안은 방화벽을 통과해야 하는 응용 프로그램에는 적합하지 않습니다. 통합 보안의 경우, 동일한 네트워크 안에 있을지라도 원격 컴퓨터에 있는 리소스에 액세스할 때는 제한을 받게 됩니다. 자세한 내용은 웹 응용 프로그램에 대한 액세스 권한을 참조하십시오.

인증서 인증

마지막으로 IIS는 디지털 인증서와 SSL(Secure Sockets Layer) 사용을 지원합니다. 이 시나리오에서 서버나 클라이언트는 타사의 소스로부터 얻은 디지털 ID인 인증서를 갖게 됩니다. 인증서는 요청과 함께 응용 프로그램으로 전달됩니다. Windows 사용자 계정으로 매핑되고 해당 사용 권한을 부여받을 수 있습니다. 이 인증은 각 요청이나 응답이 인증서의 인증 기관에 의해 확인되므로 트러스트 관계가 필요한 응용 프로그램에 인증이 인계된다는 장점이 있습니다.

참고 항목

웹 응용 프로그램에 대한 액세스 권한 | Visual Studio 디자인 타임의 웹 응용 프로그램 보안 | 런타임에 웹 응용 프로그램 보안 | 웹 응용 프로그램에서 SQL Server 액세스 | ASP.NET 가장 | 보안 모델