Come utilizzare l'attributo AllowPartiallyTrustedCallers per chiamare un assembly con un nome sicuro da una pagina Web utilizzando Visual C#. NET, Visual C# 2005 o versioni successive

Traduzione articoli Traduzione articoli
Identificativo articolo: 839300 - Visualizza i prodotti a cui si riferisce l?articolo.
importante In questo articolo contiene informazioni che viene illustrato come ridurre le impostazioni di protezione o disattivare la funzionalitā di protezione in un computer. Č possibile apportare queste modifiche per risolvere un problema specifico. Prima di apportare queste modifiche, si consiglia di valutare i rischi associati all'implementazione questa soluzione alternativa in un ambiente particolare. Se si implementa questa soluzione alternativa, adottare ogni ulteriore procedura per proteggere il sistema.
Espandi tutto | Chiudi tutto

In questa pagina

Sommario

č possibile chiamare un controllo utente di Windows da una pagina Web. Per chiamare un controllo utente di Windows che possono accedere alle risorse protette e che viene creato un assembly che ha un nome sicuro, č necessario contrassegnare l'assembly del controllo utente Windows con l'attributo di assembly AllowPartiallyTrusted . Č necessario includere anche una chiamata al metodo Assert per consentire il controllo utente Windows per accedere a risorse protette.

INTRODUZIONE

In questo articolo passo passo viene descritto come chiamare un Windows controllo utente da una pagina Web. Il controllo utente Windows descritti in questo articolo č basato su un assembly con un nome sicuro. L'esempio in questo articolo viene descritto come utilizzare l'attributo AllowPartiallyTrustedCallers dell'assembly in modo che un assembly con un nome sicuro č possibile accedere da una pagina Web. L'esempio in articolo viene inoltre descritto come utilizzare il metodo Assert .

Creare una coppia di chiavi con nome sicuro

Una coppia di chiavi con nome sicuro č utilizzata per firmare un assembly per un controllo utente che ha un nome sicuro. Il nome sicuro viene utilizzato quando si crea un gruppo di codice concede l'autorizzazione per utilizzare l'assembly da codice parzialmente attendibile.
  1. Aprire un prompt dei comando di Visual Studio.

    In Microsoft Visual Studio .NET 2002, fare clic su Start , scegliere programmi , scegliere Microsoft Visual Studio. NET , Visual Studio .NET Tools , quindi prompt dei comandi di Visual Studio. NET . Visual Studio Verrā visualizzata la finestra prompt dei comandi NET.

    In Microsoft Visual Studio .NET 2003, fare clic su Start , scegliere programmi , scegliere Microsoft Visual Studio .NET 2003 , Visual Studio .NET Tools , quindi prompt dei comandi di Visual Studio .NET 2003 . Verrā visualizzata la finestra prompt dei comandi di Visual Studio .NET 2003.

    In Visual Studio 2005, fare clic su Start , scegliere programmi , scegliere Microsoft Visual Studio 2005 , Visual Studio 2005 Tools , quindi prompt dei comandi di Visual Studio 2005 . Verrā visualizzata la finestra prompt dei comandi di Visual Studio 2005.

    In Visual Studio 2008, fare clic su Start , scegliere programmi , scegliere Microsoft Visual Studio 2008 , Visual Studio 2008 Tools , quindi prompt dei comandi di Visual Studio 2008 . La finestra di prompt 2008Command Visual Studio viene visualizzata.
  2. Digitare quanto segue al prompt dei comandi e premere INVIO:
    sn -k c:\snKey.snk

Creare un controllo utente di Windows utilizzando Microsoft Visual C#. NET, di Microsoft Visual C# 2005 o di una versione successiva

avviso Questa soluzione alternativa potrebbe rendere il computer o la rete pių vulnerabile agli attacchi di utenti malintenzionati o da software dannoso, ad esempio virus. Si sconsiglia di questa soluzione tuttavia queste informazioni vengono fornite in modo che č possibile implementare questa soluzione alternativa a propria discrezione. Utilizzare questa soluzione alternativa a proprio rischio.

Questo controllo utente viene illustrato come utilizzare l'attributo AllowPartiallyTrustedCallers di un assembly. Un assembly con un nome sicuro puō essere chiamato solo da un chiamante completamente attendibile a meno che l'assembly utilizzi l'attributo AllowPartiallyTrustedCallers . L'esempio per il controllo utente viene inoltre illustrato come utilizzare il metodo Assert . Il metodo Assert dichiara il codice che chiama il metodo Assert per accedere alla risorsa protetta da una richiesta di autorizzazione utilizzabili dal codice chiamante. Il codice puō accedere alla risorsa anche se i chiamanti che sono superiori nello stack non dispongono dell'autorizzazione per accedere alla risorsa.

Questo controllo utente consente di selezionare un file utilizzando la finestra di dialogo aperte. Il controllo apre quindi il file di testo nella casella di riepilogo. L'interfaccia utente di questo controllo utente include una casella di testo e una casella di riepilogo. La casella di testo Visualizza il nome del file che č selezionato, e la casella di riepilogo Mostra il contenuto del file che č selezionata.

Per leggere il nome del file selezionato dalla casella OpenFileDialog e leggere il file, l'autorizzazione FileIOPermission tipo di autorizzazione deve essere concessa. Il controllo utente deve disporre di questa autorizzazione tramite il gruppo di codice. La pagina Web che chiama il controllo non dispone di questa autorizzazione.

Per evitare che un percorso stack che non č riuscito perché il chiamante non č disponibile il tipo di autorizzazione FileIOPermission richiesto, utilizzare il metodo Assert . Si noti che il metodo Assert aprire vulnerabilitā a livello di protezione se il metodo Assert viene utilizzato in modo non corretto o inappropriato. Di conseguenza, occorre utilizzare il metodo Assert con estrema cautela. Un metodo RevertAssert deve seguire il metodo Assert come dopo che l'operazione di file č stata completata.

Nota Per assicurarsi che il contenuto del file venga visualizzato correttamente nella casella di riepilogo, č necessario utilizzare questo controllo utente per selezionare solo i file di testo.
  1. Avviare Microsoft Visual Studio. NET, Microsoft Visual Studio 2005 o una versione successiva di Visual Studio.
  2. Scegliere Nuovo dal menu file , quindi progetto . Verrā visualizzata la finestra di dialogo Nuovo progetto .
  3. In Tipi progetto fare clic su Progetti di Visual C# .

    Nota In Visual Studio, scegliere C# in Tipi progetto .
  4. In modelli , fare clic su Windows Control Library .
  5. Nella casella nome , digitare UserControl .
  6. Fare clic su OK .
  7. Nella finestra Esplora soluzioni, fare clic con il pulsante destro del mouse su UserControl1.cs e quindi scegliere Visualizza codice . Il file UserControl1.cs viene visualizzato.
  8. Sostituire il codice esistente con il codice riportato di seguito:
    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. In Esplora soluzioni, fare clic con il pulsante destro del mouse sul file AssemblyInfo.cs e quindi scegliere Visualizza codice . Il file AssemblyInfo.cs viene visualizzato.
  10. Individuare il seguente codice:
    [assembly: AssemblyVersion("1.0.*")]
    sostituire questo codice con il codice riportato di seguito:
    [assembly: AssemblyVersion("1.0.0.0")]
  11. Individuare il seguente codice:
    [assembly: AssemblyKeyFile("")]
    sostituire questo codice con il codice riportato di seguito:
    [assembly: AssemblyKeyFile("c:\\snKey.snk")]
  12. Scegliere dal menu Genera , Genera soluzione .

Creare un gruppo per assegnare le autorizzazioni per l'assembly di codice

avviso Questa soluzione alternativa potrebbe rendere il computer o la rete pių vulnerabile agli attacchi di utenti malintenzionati o da software dannoso, ad esempio virus. Si sconsiglia di questa soluzione tuttavia queste informazioni vengono fornite in modo che č possibile implementare questa soluzione alternativa a propria discrezione. Utilizzare questa soluzione alternativa a proprio rischio.

Un gruppo di codice determina se un assembly corrisponde i criteri definiti dall'amministratore viene definito come una condizione di appartenenza. Se l'assembly corrisponde, il gruppo di codice concede all'assembly un set di autorizzazioni che č stato associato tale gruppo di codice.

Per creare un gruppo di codice:
  1. Fare clic su Start , scegliere Impostazioni e quindi fare clic su Pannello di controllo . Verrā visualizzata la finestra Pannello di controllo .
  2. Fare doppio clic su Strumenti di amministrazione . Verrā visualizzata la finestra Strumenti di amministrazione .
  3. In Microsoft Visual Studio .NET 2002, area di lavoro fare doppio clic su configurazione Microsoft .NET Framework . Il .NET Framework Configuration verrā visualizzata la finestra.

    Per Microsoft Visual Studio .NET 2003, fare doppio clic sul Microsoft .NET Framework 1.1 Configuration . Verrā visualizzata la finestra configurazione di .NET 1.1 .

    In Microsoft Visual Studio 2005 o versioni successive, fare doppio clic Microsoft .NET Framework 2.0 Configuration . Il .NET Framework 2.0 Configuration verrā visualizzata la finestra.
  4. Nel riquadro sinistro, espandere Criteri di protezione , espandere il computer e quindi espandere Gruppi di codice .
  5. Fare clic con il pulsante destro del mouse su All_Code e quindi fare clic su Nuovo . Verrā visualizzata l'autocomposizione Crea gruppo di codice.
  6. Verificare che sia selezionato Crea un nuovo gruppo di codice , digitare MyUserControlCodeGroup nella casella nome e quindi fare clic su Avanti . Verrā visualizzata la pagina specificare un tipo di condizione .
  7. Nell'elenco specificare il tipo di condizione per questo gruppo di codice , fare clic su Nome sicuro .
  8. Fare clic su Importa . Verrā visualizzata la finestra di dialogo Importa nome sicuro dalla assembly .
  9. Individuare il file UserControl.dll creato nella sezione "Creazione di un controllo utente di Windows utilizzando una versione successiva, Microsoft Visual C# 2005 o Microsoft Visual C# .NET" e quindi fare clic su Apri .
  10. Fare clic su Avanti . Verrā visualizzata la pagina assegnare un set di autorizzazioni al gruppo di codice .
  11. Fare clic su Usa esistente set di autorizzazione , selezionare FullTrust dall'elenco e quindi fare clic su Avanti . Verrā visualizzata la pagina completamento della creazione guidata .
  12. Fare clic su Fine per chiudere la procedura guidata Crea gruppo di codice.

Creare un file HTML per richiamare il controllo utente

Dopo che si crea un gruppo di codice per assegnare le autorizzazioni per l'assembly, č necessario creare un file HTML per chiamare il controllo utente dal browser e per assicurarsi che il controllo utente viene chiamato correttamente č necessario impostare l'ambiente.
  1. Fare clic su Start , scegliere Esegui , digitare notepad e quindi fare clic su OK .
  2. Nel blocco note incollare il seguente codice:
    <OBJECT id="MyWinControl1" height="200" width="200" classid="http:UserControl.dll#UserControl.UserControl1" VIEWASTEXT>
        
    </OBJECT> 
  3. Nella cartella principale di Microsoft Internet Information Services (IIS), salvare il file come CallUserControl.htm.
  4. Copiare il file UserControl.dll creato nella sezione "Creare un controllo utente di Windows utilizzando Microsoft Visual C#. NET, Microsoft Visual C# 2005 o una versione successiva" nella cartella principale IIS.
  5. Aprire Microsoft Internet Explorer.
  6. Nella casella indirizzo digitare http://localhost/CallUserControl.htm e quindi premere INVIO. Verrā visualizzata la finestra di dialogo Apri .
  7. Individuare qualsiasi file di testo e quindi fare clic su Apri . Il testo del file viene visualizzato nel controllo ListBox nel browser.

Riferimenti

Per ulteriori informazioni, visitare il seguente sito Web Microsoft Developer Network (MSDN):
Configurazione di gruppi di codice tramite lo strumento .NET Framework Configuration
http://msdn2.microsoft.com/en-us/library/eb8xw74a(vs.71).aspx

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

Gli assembly di .NET framework e l'attributo AllowPartiallyTrustedCallers
http://msdn2.microsoft.com/en-us/library/aa302328.aspx

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

Considerazioni sulla protezione di assembly
http://msdn2.microsoft.com/en-us/library/ab4eace3(vs.71).aspx

Protezione briefs: nomi sicuri e protezione in .NET Framework
http://msdn2.microsoft.com/en-us/library/aa302416.aspx

Proprietā

Identificativo articolo: 839300 - Ultima modifica: martedė 15 luglio 2008 - Revisione: 4.1
Le informazioni in questo articolo si applicano a:
  • 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
Chiavi: 
kbmt kbhowtomaster kbhowto kblistbox kbfileio kbdll kbcontrol kbweb kbuser kbsecurity kbpolicy kbopenfile KB839300 KbMtit
Traduzione automatica articoli
Il presente articolo č stato tradotto tramite il software di traduzione automatica di Microsoft e non da una persona. Microsoft offre sia articoli tradotti da persone fisiche sia articoli tradotti automaticamente da un software, in modo da rendere disponibili tutti gli articoli presenti nella nostra Knowledge Base nella lingua madre dell?utente. Tuttavia, un articolo tradotto in modo automatico non č sempre perfetto. Potrebbe contenere errori di sintassi, di grammatica o di utilizzo dei vocaboli, pių o meno allo stesso modo di come una persona straniera potrebbe commettere degli errori parlando una lingua che non č la sua. Microsoft non č responsabile di alcuna imprecisione, errore o danno cagionato da qualsiasi traduzione non corretta dei contenuti o dell?utilizzo degli stessi fatto dai propri clienti. Microsoft, inoltre, aggiorna frequentemente il software di traduzione automatica.
Clicca qui per visualizzare la versione originale in inglese dell?articolo: 839300
LE INFORMAZIONI CONTENUTE NELLA MICROSOFT KNOWLEDGE BASE SONO FORNITE SENZA GARANZIA DI ALCUN TIPO, IMPLICITA OD ESPLICITA, COMPRESA QUELLA RIGUARDO ALLA COMMERCIALIZZAZIONE E/O COMPATIBILITA' IN IMPIEGHI PARTICOLARI. L'UTENTE SI ASSUME L'INTERA RESPONSABILITA' PER L'UTILIZZO DI QUESTE INFORMAZIONI. IN NESSUN CASO MICROSOFT CORPORATION E I SUOI FORNITORI SI RENDONO RESPONSABILI PER DANNI DIRETTI, INDIRETTI O ACCIDENTALI CHE POSSANO PROVOCARE PERDITA DI DENARO O DI DATI, ANCHE SE MICROSOFT O I SUOI FORNITORI FOSSERO STATI AVVISATI. IL DOCUMENTO PUO' ESSERE COPIATO E DISTRIBUITO ALLE SEGUENTI CONDIZIONI: 1) IL TESTO DEVE ESSERE COPIATO INTEGRALMENTE E TUTTE LE PAGINE DEVONO ESSERE INCLUSE. 2) I PROGRAMMI SE PRESENTI, DEVONO ESSERE COPIATI SENZA MODIFICHE, 3) IL DOCUMENTO DEVE ESSERE DISTRIBUITO INTERAMENTE IN OGNI SUA PARTE. 4) IL DOCUMENTO NON PUO' ESSERE DISTRIBUITO A SCOPO DI LUCRO.

Invia suggerimenti

 

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