Cómo: Rechazar permisos mediante el marcador RequestRefuse

Actualización: noviembre 2007

Si le preocupa que el código pueda utilizarse para obtener acceso a los recursos del sistema de manera malintencionada, puede solicitar que nunca se le conceda un permiso determinado. Por ejemplo, una aplicación que examina los datos de un archivo pero no los modifica nunca, puede rechazar los permisos de escritura en archivo. En el caso de un error o un ataque malintencionado, este código no puede dañar los datos con los que trabaja.

RequestRefuse permite solicitar un amplio conjunto de permisos como permisos opcionales, además de garantizar que no se concedan determinados permisos específicos.

En el ejemplo siguiente, se utiliza RequestRefuse para rechazar FileIOPermission en el sistema de seguridad de Common Language Runtime:

Ejemplo

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

En el ejemplo anterior, no se concede permiso para crear el archivo y se genera una excepción de seguridad. La instrucción Catch intercepta la excepción y la aplicación muestra este mensaje en la consola:

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

Vea también

Conceptos

Solicitar permisos

Otros recursos

Extender metadatos mediante atributos

Seguridad de acceso a código