ClickOnce 애플리케이션은 코드가 보호된 리소스 및 작업에 대한 액세스를 제한하는 데 도움이 되도록 .NET Framework의 코드 액세스 보안 제약 조건이 적용됩니다. 따라서 그에 따라 ClickOnce 애플리케이션을 작성하기 위해 코드 액세스 보안의 의미를 이해하는 것이 중요합니다. 애플리케이션은 완전 신뢰를 사용하거나 인터넷 및 인트라넷 영역과 같은 부분 영역을 사용하여 액세스를 제한할 수 있습니다.
또한 ClickOnce는 인증서를 사용하여 애플리케이션 게시자의 신뢰성을 확인하고 애플리케이션 및 배포 매니페스트에 서명하여 파일이 변조되지 않았음을 증명합니다. 서명은 매니페스트가 생성된 후 애플리케이션 파일을 더 쉽게 변경할 수 있도록 하는 선택적 단계입니다. 그러나 서명된 매니페스트가 없으면 애플리케이션 설치 관리자가 중간 보안 공격에 변조되지 않도록 하기가 어렵습니다. 이러한 이유로 애플리케이션 및 배포 매니페스트에 서명하여 애플리케이션을 보호하는 것이 좋습니다.
영역
ClickOnce 기술을 사용하여 배포된 애플리케이션은 보안 영역에서 정의한 사용 권한 및 작업 집합으로 제한됩니다. 보안 영역은 브라우저에서 정의되며 애플리케이션의 위치를 기반으로 합니다. 다음 표에서는 배포 위치에 따라 기본 사용 권한을 나열합니다.
배포 위치 | 보안 영역 |
---|---|
웹에서 실행 | 인터넷 영역 |
웹에서 설치 | 인터넷 영역 |
네트워크 파일 공유에서 설치 | 로컬 인트라넷 영역 |
CD-ROM에서 설치 | 완전 신뢰 |
기본 권한은 애플리케이션의 원래 버전이 배포된 위치를 기반으로 합니다. 애플리케이션에 대한 업데이트는 해당 권한을 상속합니다. 애플리케이션이 웹 또는 네트워크 위치에서 업데이트를 확인하도록 구성되어 있고 최신 버전을 사용할 수 있는 경우 원래 설치는 완전 신뢰 권한 대신 인터넷 또는 인트라넷 영역에 대한 권한을 받을 수 있습니다. 사용자에게 메시지가 표시되지 않도록 시스템 관리자는 특정 애플리케이션 게시자를 신뢰할 수 있는 원본으로 정의하는 ClickOnce 배포 정책을 지정할 수 있습니다. 이 정책이 배포된 컴퓨터의 경우 사용 권한이 자동으로 부여되고 사용자에게 메시지가 표시되지 않습니다. 자세한 내용은 신뢰할 수 있는 애플리케이션 배포 개요를 참조하세요. 신뢰할 수 있는 애플리케이션 배포를 구성하기 위해 컴퓨터 또는 엔터프라이즈 수준에 인증서를 설치할 수 있습니다. 자세한 내용은 방법: ClickOnce 애플리케이션용 클라이언트 컴퓨터에 신뢰할 수 있는 게시자 추가를 참조하세요.
비고
.NET Core 및 .NET 5 이상용 ClickOnce에서 이 기능은 지원되지 않습니다. 자세한 내용은 .NET용 ClickOnce를 참조하세요.
코드 액세스 보안 정책
애플리케이션에 대한 사용 권한은 애플리케이션 매니페스트의 <trustInfo> 요소 요소에 있는 설정에 따라 결정됩니다. Visual Studio는 프로젝트의 보안 속성 페이지의 설정에 따라 이 정보를 자동으로 생성합니다. ClickOnce 애플리케이션에는 요청하는 특정 권한만 부여됩니다. 예를 들어 파일 액세스에 전체 신뢰 권한이 필요한 경우 애플리케이션이 파일 액세스 권한을 요청하는 경우 전체 신뢰 권한이 아닌 파일 액세스 권한만 부여됩니다. ClickOnce 애플리케이션을 개발할 때 애플리케이션에 필요한 특정 권한만 요청해야 합니다. 대부분의 경우 인터넷 또는 로컬 인트라넷 영역을 사용하여 애플리케이션을 부분 신뢰로 제한할 수 있습니다. 자세한 내용은 방법: ClickOnce 애플리케이션에 대한 보안 영역 설정을 참조하세요. 애플리케이션에 사용자 지정 권한이 필요한 경우 사용자 지정 영역을 만들 수 있습니다. 자세한 내용은 방법: ClickOnce 애플리케이션에 대한 사용자 지정 권한 설정을 참조하세요.
비고
.NET Core 및 .NET 5 이상용 ClickOnce에서는 코드 액세스 보안이 지원되지 않습니다. .NET Framework에서 코드 액세스 보안의 사용은 모범 사례가 아니며 권장되지 않습니다.
애플리케이션이 배포된 영역에 대한 기본 사용 권한 집합의 일부가 아닌 권한을 포함하면 최종 사용자에게 설치 또는 업데이트 시간에 사용 권한을 부여하라는 메시지가 표시됩니다. 사용자에게 메시지가 표시되지 않도록 시스템 관리자는 특정 애플리케이션 게시자를 신뢰할 수 있는 원본으로 정의하는 ClickOnce 배포 정책을 지정할 수 있습니다. 이 정책이 배포된 컴퓨터에서는 사용 권한이 자동으로 부여되고 사용자에게 메시지가 표시되지 않습니다.
개발자는 애플리케이션이 적절한 권한으로 실행되도록 해야 합니다. 애플리케이션이 런타임 동안 영역 외부에서 권한을 요청하는 경우 보안 예외가 나타날 수 있습니다. Visual Studio를 사용하면 대상 보안 영역에서 애플리케이션을 디버그할 수 있으며 보안 애플리케이션 개발에 도움을 제공합니다. 자세한 내용은 System.Deployment.Application을 사용하는 ClickOnce 앱 디버그를 참조하세요.
코드 액세스 보안 및 ClickOnce에 대한 자세한 내용은 ClickOnce 애플리케이션에 대한 코드 액세스 보안을 참조하세요.
코드 서명 인증서
ClickOnce 배포를 사용하여 애플리케이션을 게시하려면 퍼블릭/프라이빗 키 쌍을 사용하여 애플리케이션에 대한 애플리케이션 및 배포 매니페스트에 서명할 수 있습니다. 매니페스트에 서명하는 도구는 프로젝트 디자이너의 서명 페이지에서 사용할 수 있습니다. 자세한 내용은 프로젝트 디자이너의 서명 페이지를 참조하세요.
매니페스트에 서명된 후에는 Authenticode 서명을 기반으로 하는 게시자 정보가 설치 중에 사용 권한 대화 상자에 사용자에게 표시되어 애플리케이션이 신뢰할 수 있는 원본에서 시작되었음을 사용자에게 표시합니다.
ClickOnce 및 인증서에 대한 자세한 내용은 ClickOnce 및 Authenticode를 참조하세요.
양식 기반 인증 ASP.NET
각 사용자가 액세스할 수 있는 배포를 제어하려면 웹 서버에 배포된 ClickOnce 애플리케이션에 익명 액세스를 사용하도록 설정해서는 안 됩니다. 대신 사용자가 Windows 인증을 사용하여 사용자의 ID에 따라 설치한 배포에 액세스할 수 있도록 합니다.
ClickOnce는 영구 쿠키를 사용하기 때문에 ASP.NET 양식 기반 인증을 지원하지 않습니다. 이들은 브라우저 캐시에 상주하고 해킹 될 수 있기 때문에 보안 위험을 제시합니다. 따라서 ClickOnce 애플리케이션을 배포하는 경우 Windows 인증 외에 모든 인증 시나리오는 지원되지 않습니다.
인수 전달
인수를 ClickOnce 애플리케이션에 전달해야 하는 경우 추가 보안 고려 사항이 발생합니다. ClickOnce를 사용하면 개발자가 웹을 통해 배포된 애플리케이션에 쿼리 문자열을 제공할 수 있습니다. 쿼리 문자열은 애플리케이션을 시작하는 데 사용되는 URL 끝에 있는 일련의 이름-값 쌍 형식을 사용합니다.
http://servername.adatum.com/WindowsApp1.application?username=joeuser
기본적으로 쿼리 문자열 인수는 사용하지 않도록 설정됩니다. 사용하도록 설정하려면 애플리케이션의 배포 매니페스트에서 특성을 trustUrlParameters
설정해야 합니다. 이 값은 Visual Studio에서 설정할 수 있으며, MageUI.exe에서도 수정할 수 있습니다. 쿼리 문자열 전달을 사용하도록 설정하는 방법에 대한 자세한 단계는 방법: 온라인 ClickOnce 애플리케이션에서 쿼리 문자열 정보 검색을 참조하세요.
쿼리 문자열을 통해 검색된 인수는 안전한지 확인하기 위해 인수를 확인하지 않고 데이터베이스 또는 명령줄에 전달해서는 안 됩니다. 안전하지 않은 인수는 악의적인 사용자가 임의의 명령을 실행하도록 애플리케이션을 조작할 수 있는 데이터베이스 또는 명령줄 이스케이프 문자를 포함하는 인수입니다.
비고
쿼리 문자열 인수는 시작할 때 ClickOnce 애플리케이션에 인수를 전달하는 유일한 방법입니다. 명령줄에서 ClickOnce 애플리케이션에 인수를 전달할 수 없습니다.
난독 처리된 어셈블리 배포
Visual Studio에는 코드 난독화 및 활성 보호 조치를 통해 ClickOnce 애플리케이션을 보호하는 데 사용할 수 있는 무료 PreEmptive Protection - Dotfuscator Community가 포함되어 있습니다. 자세한 내용은 Dotfuscator 커뮤니티 사용자 가이드의 ClickOnce 섹션을 참조하세요.