Sdílet prostřednictvím


Gewusst wie: Ablehnen von Berechtigungen mithilfe des RequestRefuse-Flags

Aktualisiert: November 2007

Wenn Sie besorgt sind, dass der Code für den bösartigen Zugriff auf Systemressourcen missbraucht werden könnte, können Sie anfordern, dass ihm eine bestimmte Berechtigung niemals erteilt wird. So kann z. B. eine Anwendung, die Daten in einer Datei durchsucht, jedoch nie ändert, alle Berechtigungen zum Schreiben in der Datei verweigern. Im Falle eines Fehlers oder böswilligen Angriffs kann dieser Code die betreffenden Daten nicht beschädigen.

RequestRefuse lässt zu, dass ein umfangreicher Satz von Berechtigungen als optional angefordert wird, während gleichzeitig sichergestellt wird, dass bestimmte Berechtigungen nicht erteilt werden dürfen.

Im folgenden Beispiel wird FileIOPermission mithilfe von RequestRefuse aus dem Sicherheitssystem der Common Language Runtime verweigert:

Beispiel

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;
      }
   }
}    

Im vorherigen Beispiel wird die Berechtigung zum Erstellen der Datei nicht erteilt, und es wird eine Sicherheitsausnahme generiert. Die catch-Anweisung fängt die Ausnahme ab, und die Anwendung zeigt die folgende Meldung auf der Konsole an:

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

Siehe auch

Konzepte

Anfordern von Berechtigungen

Weitere Ressourcen

Erweitern von Metadaten mithilfe von Attributen

Codezugriffssicherheit