方法 : RequestRefuse フラグを使用することにより、アクセス許可を拒否する

更新 : 2007 年 11 月

作成したコードがシステム リソースにアクセスするために悪用される可能性があることを心配している場合は、そのコードに特定のアクセス許可を与えないように要求できます。たとえば、ファイル内のデータを参照するだけで、変更は行わないアプリケーションの場合は、ファイルへの書き込み権を拒否できます。これにより、バグが含まれていたり、悪意による攻撃を受けたりした場合でも、コードが操作するデータに損害が及ぶことはありません。

RequestRefuse を使用すると、多数のアクセス許可のセットをオプションのアクセス許可として要求し、同時に、ある特定のアクセス許可だけはコードに与えないようにすることができます。

RequestRefuse を使用して、共通言語ランタイムのセキュリティ システムから FileIOPermission が与えられることを拒否する例を次に示します。

使用例

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

上に示した例では、ファイルを作成するためのアクセス許可は与えられず、セキュリティ例外が生成されます。catch ステートメントで例外を受け取ると、アプリケーションはコンソールに次のメッセージを表示します。

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

参照

概念

アクセス許可の要求

その他の技術情報

属性を使用したメタデータの拡張

コード アクセス セキュリティ