Rifiuto di autorizzazioni

Se si teme che il codice possa essere utilizzato per accedere a risorse di sistema in modo dannoso, è possibile richiedere che al codice non venga mai concessa una determinata autorizzazione. Un'applicazione che esegue la ricerca di dati all'interno di un file senza apportarvi alcuna modifica può rifiutare, ad esempio, le autorizzazioni di scrittura nel file. In caso di errore o di attacco dannoso, i dati su cui opera il codice non verranno danneggiati.

Utilizzando RequestRefuse è possibile richiedere un ampio set di autorizzazioni in qualità di autorizzazioni facoltative ed evitare, contemporaneamente, che siano concesse alcune autorizzazioni specifiche.

Nell'esempio seguente viene utilizzato RequestRefuse per rifiutare l'autorizzazione FileIOPermission qualora il sistema di protezione di Common Language Runtime tentasse di concederla:

Imports System
Imports System.IO
Imports System.Security
Imports System.Security.Permissions
'The request is placed on the assembly level. 
<assembly: FileIOPermission(SecurityAction.RequestRefuse, Unrestricted := True)>

Namespace MyNameSpace
   Public Class MyClass1
      Public Sub New()
      End Sub
      
      Public Shared Sub Main()
         'Creation of the log is attempted in the try block.
         Try
            Dim TextStream As New StreamWriter("Log.txt")
            TextStream.WriteLine("This Log was created on {0}", DateTime.Now)
            TextStream.Close()
            Console.WriteLine("The Log was created")
         'Catch the Security exception and inform the user that the 
         'application was not granted FileIOPermission.
         Catch
            Console.WriteLine("This application does not have permission to write to the disk.")         
         End Try
      End Sub
   End Class
End Namespace
[C#]
//The request is placed on the assembly level. 
using System.Security.Permissions;
[assembly:FileIOPermission(SecurityAction.RequestRefuse ,Unrestricted = true)]

namespace MyNameSpace
{
   using System;
   using System.Security;
   using System.Security.Permissions;
   using System.IO;

   public class MyClass
   {
      public MyClass()
     {       
     }
      
      public static int Main(string[] args)
      {
         //Creation of the log is attempted in the try block.
         try
         {   
            StreamWriter TextStream = new StreamWriter("Log.txt");
            TextStream.WriteLine("This Log was created on {0}", DateTime.Now);
            TextStream.Close();
            Console.WriteLine("The Log was created");
         }
         //Catch the Security exception and inform the user that the 
         //application was not granted FileIOPermission.
         catch(SecurityException)
        {
            Console.WriteLine("This application does not have permission to write to the disk.");
        }
      

         return 0;
      }
   }
}    

Nel precedente esempio non viene concessa l'autorizzazione per la creazione del file e viene generata un'eccezione di protezione. L'istruzione catch intercetta l'eccezione e viene visualizzato il seguente messaggio sulla console:

This application does not have permission to write to the disk.

Vedere anche

Estensione di metadati mediante attributi | Richiesta di autorizzazioni | Protezione dall'accesso di codice