كيفية القيام بما يلي: رفض الأذونات باستخدام العلامة RequestRefuse
هام |
---|
في .NET Framework الإصدار 4، تم إزالة الدعم وقت التشغيل لفرض طلبات الإذن Deny، RequestMinimum، و RequestOptional، و RequestRefuse.يجب عدم استخدام هذه الطلبات في التعليمات البرمجية المستندة إلى .NET Framework 4 أو أحدث.و للمزيد من المعلومات حول هذا والتغييرات الأخرى، راجع تغييرات الأمان في .NET Framework 4. |
إذا كنت مهتمًا بشأن أنه قد يتم استخدام التعليمات البرمجية الخاصة بك للوصول إلى موارد النظام بشكل ضار، يمكنك طلب ألا يتم أبداً منحها إذن معين. على سبيل المثال، افترض وجود تطبيق يستعرض البيانات في ملف ولكن لا يعدل البيانات أبداً فيمكنه رفض أي أذونات لكتابة الملف. و بذلك في حال حدوث خطأ أو هجوم ضار، لا يمكن لهذه التعليمات البرمجية إتلاف البيانات التي تعمل عليها.
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.