AllowPartiallyTrustedCallers 특성을 사용하여 Visual C# .NET, Visual C# 2005 이상을 사용하여 웹 페이지에서 강력한 이름을 가진 어셈블리를 호출하는 방법

기술 자료 번역 기술 자료 번역
기술 자료: 839300 - 이 문서가 적용되는 제품 보기.
중요한 이 문서에는 보안 설정이 더 낮게 데 도움이 되는 방법 또는 컴퓨터의 보안 기능을 해제하는 방법을 보여 주는 정보가 포함되어 있습니다. 특정 문제를 해결하기 위해 이러한 변경 작업을 수행할 수 있습니다. 이렇게 변경하기 전에 특정 환경에서 이 해결 방법을 구현하는 것과 관련된 위험을 평가하는 것이 좋습니다. 이 해결 방법을 구현할 경우 적절한 시스템 보호 조치를 추가로 취하십시오.
모두 확대 | 모두 축소

이 페이지에서

요약

Windows 사용자 정의 컨트롤을 웹 페이지에서 호출하는 할 수 있습니다. Windows 사용자 정의 컨트롤에 있는 보안된 리소스에 액세스하고 강력한 이름이 있는 어셈블리로 빌드됩니다 호출하려면 어셈블리 AllowPartiallyTrusted 어셈블리 특성 갖는 Windows 사용자 정의 컨트롤의 표시해야 합니다. 또한 Windows 사용자 컨트롤이 보안된 리소스에. 액세스할 수 있도록 Assert 메서드 호출하여 포함해야

소개

이 문서에서는 Windows 호출하는 방법에 대해 설명합니다. 웹 페이지에서 사용자 정의 컨트롤을. 이 문서에서는 Windows 사용자 컨트롤은 강력한 이름이 있는 어셈블리로 빌드됩니다. 이 문서의 예제 웹 페이지에서 강력한 이름을 가진 어셈블리에 액세스할 수 있도록 어셈블리의 AllowPartiallyTrustedCallers 특성을 사용하는 방법에 대해 설명합니다. 이 기사의 샘플 Assert 메서드를 사용하는 방법에 대해 설명합니다.

강력한 이름을 가진 키 쌍 만들기

강력한 이름을 가진 키 쌍은 강력한 이름을 가진 사용자 정의 컨트롤의 어셈블리를 서명하는 데 사용됩니다. 강력한 이름의 어셈블리에서 부분적으로 신뢰할 수 있는 코드 사용할 수 있는 권한을 부여하는 코드 그룹을 만들 때 사용됩니다.
  1. Visual Studio 명령 프롬프트를 엽니다.

    Microsoft Visual Studio .NET 2002의 시작 을 누르고, 프로그램, Visual Studio .NET, Visual Studio .NET 도구 차례로 가리킨 다음 Visual Studio .NET 명령 프롬프트 를 클릭하십시오. Visual Studio .NET 명령 프롬프트 창에 나타납니다.

    Microsoft Visual Studio .NET 2003에서 시작 을 누르고, 프로그램, Microsoft Visual Studio .NET 2003, Visual Studio .NET 도구 차례로 가리킨 다음 Visual Studio .NET 2003 명령 프롬프트 를 클릭하십시오. Visual Studio .NET 2003 명령 프롬프트 창이 나타납니다.

    Visual Studio 2005에서 시작 을 누르고, 프로그램, Visual Studio 2005, Visual Studio 2005 도구 차례로 가리킨 다음 Visual Studio 2005 명령 프롬프트 를 클릭하십시오. Visual Studio 2005 명령 프롬프트 창이 나타납니다.

    Visual Studio 2008의 시작 을 누르고, 프로그램, Visual Studio 2008 로, Visual Studio 2008 도구 차례로 가리킨 다음 Visual Studio 2008 명령 프롬프트 를 클릭하십시오. Visual Studio 2008Command 확인 창이 나타납니다.
  2. 다음 명령 프롬프트에서 입력한 다음 Enter 키를 누릅니다.
    sn -k c:\snKey.snk

Microsoft Visual C# .NET, Microsoft Visual C# 2005 또는 이후 버전을 사용하여 Windows 사용자 정의 컨트롤 만들기

경고 이 문제를 해결하려면 컴퓨터 또는 네트워크에 더 취약한 악의적인 사용자나 바이러스와 같은 악의적인 소프트웨어의 공격을 할 수 있습니다. 따라서 이 해결 방법을 사용하지 않는 것이 좋습니다 않지만 사용자의 판단에 따라 이 해결 방법을 구현할 수 있도록 이 정보를 제공하고 있습니다. 이 해결 방법은 모든 책임은 사용하십시오.

이 사용자 정의 컨트롤에 어셈블리 AllowPartiallyTrustedCallers 특성을 사용하는 방법을 보여 줍니다. 어셈블리 AllowPartiallyTrustedCallers 특성을 사용하지 않는 경우 완전히 신뢰할 수 있는 호출자가 강력한 이름을 가진 어셈블리에 대해서만 호출할 수 있습니다. 사용자 정의 컨트롤의 예제 Assert 메서드를 사용하는 방법을 보여 줍니다. Assert 메서드를 호출하는 코드에 권한을 요청에 의해 보호되는 리소스에 대한 액세스 Assert 메서드를 호출하는 코드를 사용할 수 있는 선언합니다. 스택에서 상위 호출자에게 리소스에 대한 액세스 권한이 부여되지 않은 경우에도 코드가 리소스에 액세스할 수 있습니다.

이 사용자 정의 컨트롤을 사용하면 열려 있는 대화 상자를 사용하여 파일을 선택할 수 있습니다. 컨트롤을 클릭한 다음 목록 상자에서 텍스트 파일을 엽니다. 이 사용자 정의 컨트롤의 사용자 인터페이스를 하나의 텍스트 상자와 목록 상자를 하나 포함되어 있습니다. 텍스트 상자를 선택한 경우 파일 이름을 표시하고 목록 상자에서 선택한 파일의 내용을 보여 줍니다.

OpenFileDialog 를 상자에서 선택한 파일 이름을 읽기 및 사용 권한 부여되어야 FileIOPermission 파일을 읽을 수 있습니다. 사용자 정의 컨트롤을 통해 해당 코드 그룹에 부여된 사용 이 권한이 있어야 합니다. 컨트롤을 호출하는 웹 페이지를 이 사용을 권한이 없습니다.

호출자가 필요한 FileIOPermission 권한 형식을 갖고 있지 않기 때문에 성공적이지 스택 워크를 방지하기 위해 Assert 메서드를 사용하십시오. Assert 메서드를 잘못 또는 부적절하게 사용하는 Assert 메서드는 보안 취약점을 열 수 있으므로 유의하십시오. 따라서 신중하게 Assert 메서드를 사용해야 합니다. 파일 작업이 완료될 때 즉시 RevertAssert 메서드는 Assert 메서드는 따라야 합니다.

참고 목록 상자에서 파일 내용을 올바르게 나타나는지 확인하기 위해 이 사용자 정의 컨트롤을 텍스트 파일을 선택할 수 있습니다.
  1. Visual Studio .NET, Microsoft Visual Studio 2005 또는 이후 버전의 Visual Studio 시작하십시오.
  2. 파일 메뉴에서 새로 만들기를 가리킨 다음 프로젝트 를 클릭하십시오. 새 프로젝트 대화 상자가 나타납니다.
  3. 프로젝트 형식Visual C# 프로젝트 를 클릭하십시오.

    참고 Visual Studio에서 Visual C#프로젝트 형식 에서 클릭하십시오.
  4. 템플릿Windows 컨트롤 라이브러리.
  5. UserControl이름 상자에 입력하십시오.
  6. 확인 을 클릭하십시오.
  7. 솔루션 탐색기 창에서 UserControl1.cs 를 마우스 오른쪽 단추로 클릭한 다음 코드 보기를 클릭하십시오. UserControl1.cs 파일이 나타납니다.
  8. 기존 코드를 다음 코드로 바꿉니다:
    using System;
    using System.Collections;
    using System.ComponentModel;
    using System.Drawing;
    using System.Data;
    using System.Windows.Forms;
    using System.IO;
    using System.Security;
    using System.Security.Permissions;
    using System.Reflection;
    using System.Runtime.CompilerServices;
    
    [assembly:AllowPartiallyTrustedCallers]
    
    namespace UserControl
    {
    	/// <summary>
    	/// Summary description for UserControl1.
    	/// </summary>
    	public class UserControl1 : System.Windows.Forms.UserControl
    	{
    		private System.Windows.Forms.TextBox textBox1;
    		private System.Windows.Forms.ListBox listBox1;
    		/// <summary>
    		/// Required designer variable.
    		/// </summary>
    		private System.ComponentModel.Container components = null;
    
    		public UserControl1()
    		{
    			// This call is required by the Windows.Forms Form Designer.
    			InitializeComponent();
    
    			// TODO: Add any initialization after the InitForm call.
    			OpenFileDialog fileDialog = new OpenFileDialog();
    			if(fileDialog.ShowDialog() == DialogResult.OK)
    			{
    				// Reading the name of the selected file from the OpenFileDialog box
    				// and reading the file requires FileIOPermission.   
    				// The Assert command must be followed by a RevertAssert as soon as the file operation 
    				// is completed.
    				new FileIOPermission(PermissionState.Unrestricted).Assert();
    				textBox1.Text = fileDialog.FileName;
    				// Display the contents of the file in the text box.
    				FileStream fsIn = new FileStream(textBox1.Text, FileMode.Open, FileAccess.Read, 
    					FileShare.Read);
    				StreamReader sr = new StreamReader(fsIn);
    			
    				// Process every line in the file.
    				for (String Line = sr.ReadLine(); Line != null; Line = sr.ReadLine()) 
    				{
    					listBox1.Items.Add(Line);
    				}
    				// It is very important to call RevertAssert to restore the stack walk for
    				// file operations.
    				FileIOPermission.RevertAssert();
    			}
    
    		}
    
    		/// <summary>
    		/// Clean up any resources that are being used.
    		/// </summary>
    		protected override void Dispose( bool disposing )
    		{
    			if( disposing )
    			{
    				if( components != null )
    					components.Dispose();
    			}
    			base.Dispose( disposing );
    		}
    
    		#region Component Designer generated code
    		/// <summary>
    		/// Required method for Designer support. Do not modify 
    		/// the contents of this method with the code editor.
    		/// </summary>
    		private void InitializeComponent()
    		{
    			this.textBox1 = new System.Windows.Forms.TextBox();
    			this.listBox1 = new System.Windows.Forms.ListBox();
    			this.SuspendLayout();
    			// 
    			// textBox1
    			// 
    			this.textBox1.Location = new System.Drawing.Point(32, 16);
    			this.textBox1.Name = "textBox1";
    			this.textBox1.TabIndex = 0;
    			this.textBox1.Text = "textBox1";
    			// 
    			// listBox1
    			// 
    			this.listBox1.Location = new System.Drawing.Point(144, 16);
    			this.listBox1.Name = "listBox1";
    			this.listBox1.Size = new System.Drawing.Size(120, 95);
    			this.listBox1.TabIndex = 1;
    			// 
    			// UserControl1
    			// 
    			this.Controls.Add(this.listBox1);
    			this.Controls.Add(this.textBox1);
    			this.Name = "UserControl1";
    			this.Size = new System.Drawing.Size(376, 120);
    			this.ResumeLayout(false);
    
    		}
    		#endregion
    			}
    }
    
  9. 솔루션 탐색기에서 AssemblyInfo.cs, 마우스 오른쪽 단추로 클릭한 다음 코드 보기를 클릭하십시오. AssemblyInfo.cs 파일이 나타납니다.
  10. 다음 코드를 찾습니다:
    [assembly: AssemblyVersion("1.0.*")]
    이 코드를 다음 코드로 바꾸기:
    [assembly: AssemblyVersion("1.0.0.0")]
  11. 다음 코드를 찾습니다:
    [assembly: AssemblyKeyFile("")]
    이 코드를 다음 코드로 바꾸기:
    [assembly: AssemblyKeyFile("c:\\snKey.snk")]
  12. 빌드 메뉴에서 눌러 빌드 솔루션.

어셈블리에 대한 사용 권한을 할당하려면 코드 그룹 만들기

경고 이 문제를 해결하려면 컴퓨터 또는 네트워크에 더 취약한 악의적인 사용자나 바이러스와 같은 악의적인 소프트웨어의 공격을 할 수 있습니다. 따라서 이 해결 방법을 사용하지 않는 것이 좋습니다 않지만 사용자의 판단에 따라 이 해결 방법을 구현할 수 있도록 이 정보를 제공하고 있습니다. 이 해결 방법은 모든 책임은 사용하십시오.

코드 그룹 멤버 조건으로 참조되는 관리자가 정의한 조건에 어셈블리를 일치하는지 여부를 확인합니다. 어셈블리 일치하는 경우, 코드 그룹은 어셈블리에 해당 코드 그룹과 연결된 권한 집합을 부여합니다.

코드 그룹을 만들려면 다음을 수행합니다.
  1. 시작 을 누르고 설정 가리킨 다음 제어판 을 누릅니다. 제어판 창이 나타납니다.
  2. 관리 도구 를 두 번 클릭하십시오. 관리 도구 창이 나타납니다.
  3. Microsoft Visual Studio .NET 2002에서, Microsoft .NET Framework 구성 두 번 클릭하십시오. 해당 .NET Framework 구성 창이 나타납니다.

    Microsoft Visual Studio .NET 2003을 두 번 Microsoft .NET Framework 1.1 구성. .NET 구성 1.1 창이 나타납니다.

    Visual Studio 2005 또는 이후 버전의 Microsoft .NET Framework 2.0 구성 두 번 클릭하십시오. 해당 .NET Framework 2.0 구성 창이 나타납니다.
  4. 왼쪽 창에서 런타임 보안 정책, 컴퓨터 를 차례로 확장한 다음 코드 그룹 을 확장하십시오.
  5. All_Code, 마우스 오른쪽 단추로 클릭하고 새로 만들기 를 클릭하십시오. 코드 그룹 만들기 마법사가 나타납니다.
  6. 새 코드 그룹 만들기, 이름 상자에 MyUserControlCodeGroup 선택되어 있는지 확인한 후 다음 을 클릭하십시오. 조건 형식 선택 페이지가 나타납니다.
  7. 이 코드 그룹에 대한 조건 형식 선택 목록에서 강력한 이름 을 클릭하십시오.
  8. 가져오기 를 클릭하십시오. 가져오기 강력한 이름 시작 어셈블리 대화 상자가 나타납니다.
  9. "Microsoft Visual C# .NET, Microsoft Visual C# 2005를 또는 이후 버전을 사용하여 Windows 사용자 정의 컨트롤 만들기" 절에서 만든 UserControl.dll 파일을 찾은 다음 열기 를 클릭하십시오.
  10. 다음 을 클릭하십시오. 코드 그룹에 권한 집합 할당 페이지가 나타납니다.
  11. 기존 권한 집합 사용FullTrust 목록에서 클릭한 후 다음 을 클릭하십시오. 마법사 완료 페이지가 나타납니다.
  12. 코드 그룹 만들기 마법사를 닫으려면 마침 을 클릭하십시오.

사용자 정의 컨트롤을 호출하는 HTML 파일 만들기

어셈블리에 대한 사용 권한을 할당하려면 코드 그룹을 만든 후 브라우저를 통해 사용자 정의 컨트롤을 호출하는 HTML 파일을 만들어야 합니다 있는지 사용자 정의 컨트롤을 성공적으로 호출할 환경을 구성하는 설정해야 합니다.
  1. 시작 을 누르고, 실행 을, 메모장 을 입력한 다음 확인 을 누릅니다.
  2. 메모장에 다음 코드를 붙여 넣습니다.
    <OBJECT id="MyWinControl1" height="200" width="200" classid="http:UserControl.dll#UserControl.UserControl1" VIEWASTEXT>
        
    </OBJECT> 
  3. 루트 폴더에 Microsoft 인터넷 정보 서비스 (IIS) 로 CallUserControl.htm 파일을 저장합니다.
  4. IIS 루트 폴더에 "Microsoft Visual C# .NET, Microsoft Visual C# 2005를 또는 이후 버전을 사용하여 Windows 사용자 정의 컨트롤 만들기" 절에서 만든 UserControl.dll 파일을 복사하십시오.
  5. Microsoft 인터넷 탐색기를 엽니다.
  6. 주소 상자에 http://localhost/CallUserControl.htm 를 입력한 다음 Enter 키를 누릅니다. 열기 대화 상자가 나타납니다.
  7. 텍스트 파일을 찾은 다음 열기 를 클릭하십시오. 텍스트 파일의 브라우저에서 ListBox 컨트롤에 나타납니다.

참조

자세한 내용은 다음 Microsoft 개발자 네트워크 (MSDN) 웹 사이트를 방문하십시오.
.NET Framework 구성 도구를 사용하여 코드 그룹 구성
http://msdn2.microsoft.com/en-us/library/eb8xw74a(vs.71).aspx

CodeAccessPermission.Assert 메서드
http://msdn2.microsoft.com/en-us/library/system.security.codeaccesspermission.assert(vs.71).aspx

.NET Framework 어셈블리 및 AllowPartiallyTrustedCallers 특성
http://msdn2.microsoft.com/en-us/library/aa302328.aspx

AllowPartiallyTrustedCallersAttribute 클래스
http://msdn2.microsoft.com/en-us/library/system.security.allowpartiallytrustedcallersattribute(vs.71).aspx

어셈블리 보안 고려 사항
http://msdn2.microsoft.com/en-us/library/ab4eace3(vs.71).aspx

보안 briefs: 강력한 이름 및 .NET Framework 에서 보안
http://msdn2.microsoft.com/en-us/library/aa302416.aspx

속성

기술 자료: 839300 - 마지막 검토: 2008년 7월 15일 화요일 - 수정: 4.1
본 문서의 정보는 다음의 제품에 적용됩니다.
  • Microsoft Visual C# 2005 Express Edition
  • Microsoft Visual C# .NET 2003 Standard Edition
  • Microsoft Visual C# .NET 2002 Standard Edition
  • Microsoft Visual C# 2008 Express Edition
키워드:?
kbmt kbhowtomaster kbhowto kblistbox kbfileio kbdll kbcontrol kbweb kbuser kbsecurity kbpolicy kbopenfile KB839300 KbMtko
기계 번역된 문서
중요: 본 문서는 전문 번역가가 번역한 것이 아니라 Microsoft 기계 번역 소프트웨어로 번역한 것입니다. Microsoft는 번역가가 번역한 문서 및 기계 번역된 문서를 모두 제공하므로 Microsoft 기술 자료에 있는 모든 문서를 한글로 접할 수 있습니다. 그러나 기계 번역 문서가 항상 완벽한 것은 아닙니다. 따라서 기계 번역 문서에는 마치 외국인이 한국어로 말할 때 실수를 하는 것처럼 어휘, 구문 또는 문법에 오류가 있을 수 있습니다. Microsoft는 내용상의 오역 또는 Microsoft 고객이 이러한 오역을 사용함으로써 발생하는 부 정확성, 오류 또는 손해에 대해 책임을 지지 않습니다. Microsoft는 이러한 문제를 해결하기 위해 기계 번역 소프트웨어를 자주 업데이트하고 있습니다.

피드백 보내기

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com