보안 코딩 지침

증명 정보 기반 보안과 코드 액세스 보안에서는 매우 강력하고 명시적인 보안 구현 메커니즘을 제공합니다. 대부분의 응용 프로그램 코드에서는 .NET Framework에 의해 구현된 인프라를 사용하기만 하면 됩니다. 일부 경우에는 보안 시스템을 확장하거나 새로운 임시적 방법을 사용하여 구현된 추가 응용 프로그램 관련 보안이 필요합니다.

.NET Framework에서 적용한 권한 및 기타 적용 사항을 코드에 사용하여 악성 코드가 사용자의 기밀 정보를 얻거나 다른 바람직하지 못한 동작을 수행하지 못하도록 하는 방지책을 세워야 합니다. 또한, 신뢰할 수 있는 코드를 사용하는 예상되는 모든 경우에서 코드의 보안과 가용성 사이의 균형을 유지해야 합니다.

이 단원에서는 보안 시스템과 함께 동작하도록 코드를 설계할 수 있는 여러 가지 방법에 대해 설명합니다.

참고참고

.NET Framework 버전 4에서는 .NET Framework 보안 모델과 용어가 크게 변경되었습니다. 이러한 변경 내용에 대한 자세한 내용은 .NET Framework 4의 보안 변경 내용을 참조하십시오.

보안 중립 코드

보안 중립 코드는 보안 시스템과 함께 명시적인 작업을 수행하지 않으며, 부여받은 권한으로 실행됩니다. 보호되는 작업(예: 파일 사용, 네트워킹 등)과 관련된 보안 예외를 catch하지 못하는 응용 프로그램으로 인해 처리되지 않은 예외가 발생할 수도 있지만, 보안 중립 코드는 여전히 .NET Framework 보안 기술을 사용합니다.

보안 중립 라이브러리에는 사용자가 알아 두어야 할 특별한 특성이 있습니다. 라이브러리에서 파일을 사용하거나 비관리 코드를 호출하는 API 요소를 제공하는 경우, 사용자의 코드에 해당하는 권한이 없으면 코드는 설명된 대로 실행되지 않습니다. 그러나 코드에 권한이 있어도 해당 코드를 호출하는 모든 응용 프로그램은 같은 권한이 있어야 작동합니다. 호출하는 코드에 적절한 권한이 없으면 코드 액세스 보안 스택 워크의 결과로 SecurityException이 나타납니다.

다시 사용 가능한 구성 요소가 아닌 응용 프로그램 코드

코드가 다른 코드에 의해 호출되지 않는 응용 프로그램에 포함되어 있으면 특별한 코딩 없이 간단하게 보안을 구현할 수도 있습니다. 그러나 악성 코드가 사용자의 코드를 호출할 수 있다는 점을 명심해야 합니다. 코드 액세스 보안으로 악성 코드가 리소스에 액세스하는 것을 막을 수는 있지만, 악성 코드는 중요한 정보를 포함하고 있을 수 있는 필드나 속성의 값을 여전히 읽을 수 있습니다.

또한, 코드가 인터넷이나 신뢰할 수 없는 다른 소스에서 사용자 입력을 받는 경우에는 악의적인 입력에 주의해야 합니다.

네이티브 코드 구현에 대한 관리되는 래퍼

일반적으로 이 시나리오에서는 관리 코드에서 사용할 수 있도록 할 네이티브 코드에 몇 가지 유용한 기능이 구현됩니다. 관리되는 래퍼는 플랫폼 호출이나 COM interop를 사용하여 쉽게 작성할 수 있습니다. 그러나 이렇게 작성하면 래퍼의 호출자는 비관리 코드에 대한 권한이 있어야만 래퍼를 호출할 수 있습니다. 기본 정책에서 이는 인트라넷이나 인터넷에서 다운로드된 코드가 래퍼와 함께 작동하지 않는다는 것을 의미합니다.

이러한 래퍼를 사용하는 모든 응용 프로그램에 비관리 코드 권한을 부여하는 것보다는 래퍼 코드에만 비관리 코드 권한을 부여하는 것이 좋습니다. 기본 기능에서 리소스를 노출하지 않으며 구현도 마찬가지로 안전한 경우 래퍼가 권한을 어설션하기만 하면 이 래퍼를 통해 모든 코드에서 호출할 수 있습니다. 리소스가 포함될 때 보안 코딩은 다음 단원에서 설명하는 라이브러리 코드의 경우와 같아야 합니다. 래퍼는 호출자에게 이러한 리소스를 노출할 가능성이 있으므로 네이티브 코드의 안전 여부를 주의 깊게 확인해야 하며 이런 확인은 래퍼에서 수행해야 합니다.

보호되는 리소스를 노출하는 라이브러리 코드

이 방법은 가장 강력한 보안 코딩 방법이며, 그렇기 때문에 잘못 수행될 경우 위험한 방법일 수 있습니다. 라이브러리는 다른 코드에서 사용할 수 없는 특정 리소스에 액세스할 때 인터페이스 역할을 합니다. 이것은 .NET Framework의 클래스가 해당 클래스에서 사용하는 리소스에 권한을 적용하는 것과 같습니다. 리소스를 노출하는 경우에 항상 코드에서 해당 리소스에 적절한 권한을 요구(보안 검사를 수행)한 다음 실제 작업을 수행하기 위한 권한을 어설션해야 합니다.

관련 항목

제목

설명

방법: 샌드박스에서 부분 신뢰 코드 실행

응용 프로그램에 부여된 코드 액세스 권한을 제한하는 제한된 보안 환경에서 부분 신뢰 응용 프로그램을 실행하는 방법에 대해 설명합니다.

권한 요청

보안 요청을 사용하여 .NET Framework 보안 시스템과 상호 작용하는 방법에 대해 설명합니다.

상태 데이터 보안

전용 멤버를 보호하는 방법에 대해 설명합니다.

메서드 액세스 보안

부분적으로 신뢰할 수 있는 코드가 메서드를 호출하지 못하도록 하는 방법에 대해 설명합니다.

래퍼 코드 보안

다른 코드를 래핑하는 코드의 보안 문제에 대해 설명합니다.

보안 및 공용 읽기 전용 배열 필드

.NET Framework 라이브러리에 있는 읽기 전용 public 배열을 사용하는 코드의 보안 문제에 대해 설명합니다.

예외 처리 보안

예외 처리의 보안 문제에 대해 설명합니다.

보안 및 사용자 입력

사용자 입력을 받아들이는 응용 프로그램의 보안 문제에 대해 설명합니다.

보안 및 원격 서비스 고려 사항

여러 응용 프로그램 도메인에서 통신하는 응용 프로그램의 보안 문제에 대해 설명합니다.

보안 및 Serialization

개체를 serialize할 때의 보안 문제에 대해 설명합니다.

보안 및 경합 상태

코드에서 경합 상태를 방지하는 방법에 대해 설명합니다.

보안 및 빠른 코드 생성

동적 코드를 생성하는 응용 프로그램의 보안 문제에 대해 설명합니다.

위험한 권한 및 정책 관리

보안을 저해할 수 있는 권한에 대해 설명합니다.

보안 및 설치 문제

응용 프로그램의 테스트 및 설치에 대한 고려 사항을 설명합니다.

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

ASP.NET 보안에 대해 자세히 설명하고, 코드에 이 보안을 사용하는 방법에 대한 지시 사항을 제공합니다.

코드 액세스 보안

.NET Framework 코드 액세스 보안에 대해 자세히 설명하고, 코드에서 이 보안을 사용하는 방법에 대한 지시 사항을 제공합니다.

역할 기반 보안

.NET Framework 역할 기반 보안에 대해 자세히 설명하고, 코드에 이 보안을 사용하는 방법에 대한 지시 사항을 제공합니다.