Comment : refuser des autorisations à l'aide de l'indicateur RequestRefuse

Important

Dans le .NET Framework version 4, la prise en charge du runtime a été supprimée afin d'appliquer les demandes d'autorisation Deny, RequestMinimum, RequestOptional et RequestRefuse.Ces demandes ne devraient pas être utilisées dans le code qui est basé sur le .NET Framework 4 ou version ultérieure.Pour plus d'informations sur cette modification et d'autres modifications, consultez Modifications de sécurité dans le .NET Framework 4 .

Si vous craignez que votre code puisse être utilisé pour accéder à des ressources système de manière malveillante, vous pouvez demander qu'il ne reçoive jamais une autorisation particulière.Par exemple, une application qui consulte des données dans un fichier mais ne les modifie jamais peut refuser toute autorisation d'écriture dans un fichier.En cas de bogue ou d'attaque malveillante, ce code ne peut pas altérer les données sur lesquelles il opère.

RequestRefuse permet à un vaste jeu d'autorisations d'être demandé en tant qu'autorisations optionnelles, tout en garantissant qu'un certain nombre d'autorisations spécifiques ne seront pas accordées.

L'exemple suivant utilise RequestRefuse pour refuser FileIOPermission provenant du système de sécurité du Common Language Runtime :

Exemple

Imports System
Imports System.IO
Imports System.Security
Imports System.Security.Permissions
'The request is placed at 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
//The request is placed at 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;
      }
   }
}

L'exemple précédent ne reçoit pas l'autorisation de créer le fichier et génère une exception de sécurité.L'instruction catch intercepte l'exception et l'application affiche le message suivant dans la console :

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

Voir aussi

Concepts

Extension des métadonnées à l'aide des attributs

Demande d'autorisations

Sécurité d'accès du code