Compartilhar via


Como: Recusar permissões usando o sinalizador RequestRefuse

Se você estiver preocupado que seu código pode ser usado para acessar recursos do sistema de forma mal-intencionada, poderá solicitação que ele nunca seja concedida uma permissão específica.Por exemplo, um aplicativo que navega de dados em um arquivo, mas nunca modifica os dados pode recusar qualquer permissão de gravar do arquivo.No caso de um bug ou um ataque mal-intencionado, esse código não pode danificar os dados no qual ele está funcionando.

RequestRefuse permite que um grande conjunto de permissões para ser solicitadas sistema autônomo permissões opcionais, garantindo que não estão certas permissões específicas na concessão.

O exemplo a seguir utiliza RequestRefuse recuseFileIOPermission do Common Language tempo de execução sistema de segurança:

Exemplo

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

O exemplo anterior não tem permissão para criar o arquivo e gera uma exceção de segurança.A demonstrativo catch intercepta a exceção e o aplicativo exibe a seguinte mensagem no console:

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

Consulte também

Conceitos

Solicitando permissões

Outros recursos

Estendendo metadados usando atributos

Segurança de Acesso de código