مشاركة عبر


أساسيات الأمان .NET Framework

أمن رمز الوصول هو جزء من .NET Framework التي تتحكم بالوصول إلى الموارد عن طريق التحكم في تنفيذ تعليمات برمجية. ميزة الأمان هذه منفصلة عن, ومضافة إلى الأمان الموفر من قبل نظام التشغيل.

كيفية عمله:

عندما يقوم مستخدم بتشغيل التطبيق الخاص بك, فإنه يقوم بتعيينها إلى منطقة من قبل .NET Framework وقت تشغيل اللغة العامة. الخمس مناطق هي:

المنطقة

الوصف

جهاز الكمبيوتر

تتواجد على تعليمات برمجية للتطبيق على الكمبيوتر الخاص بالمستخدم.

شبكة الإنترانت المحلية

تشغيل تعليمات برمجية للتطبيق من يجعله مشتركًا ملفات على إنترانت الخاص بالمستخدم.

إنترنت

يتم تشغيل تعليمات برمجية للتطبيق من الإنترنت.

المواقع الموثوق بها

هذه التطبيقات هي من مواقع معرفه على أنها "الموثوق بها" من خلال مستكشف الإنترنت (Internet Explorer).

المواقع غير الموثوق بها

هذه التطبيقات هي من مواقع معرفه على أنها "محظورة" من خلال مستكشف الإنترنت (Internet Explorer).

تعيين أول ثلاثة مناطق جهاز الكمبيوتر إنترانت محليةو إنترنت ، استناداً إلى مكان التذي تقع فيه التعليمات البرمجية. يمكنك يمنع التعيين بواسطة تعيين مواقع محددة إلى مجموعات المواقع غير الموثوق فيها أو مواقع موثوق بها في إنترنت مستكشف.

لدى كل من هذه المناطق بتعيين أذونات وصول الخاصة النظام المسؤول. قد يتم تعيين المستوى الأمان لمنطقة إلى ثقة تامة أو ثقة متوسطة ثقة منخفضة أو لا الثقة. تعرف مستويات الثقة الموارد التي يمكن الوصول إلى التطبيق. هذه المنطقة, مع دليل الأمان الآخر مثل الناشر الواضحة موقع ويب و URL الخاص بالتعليمات البرمجية, يحدد الأذونات الممنوحة تعليمات برمجية في وقت التشغيل. لمزيد من المعلومات حول وحدات الماكرو الأمان, راجع دليل. ليس لديك تحكم بإعدادات الأمان على الكمبيوتر الخاص بالمستخدم, و مع ذلك فيجب على تطبيقك أن بعمل ضمن الإعدادات التي يواجهها أثناء تشغيله. قد يعني هذا أنه سيتم على التطبيق الخاص بك رفض الوصول إلى موارد معينة. على سبيل المثال، التطبيق الخاص ربما يتطلب كتابة البيانات إلى ملف بينما نظام المستخدم سيرفض حق الكتابة في وقت التشغيل عن طريق رفع ‏‏ استثناء.

مهمتك الخاصة أن تطور التطبيق الخاص بك لمعالجة هذا الموقف. هذا لا يعني بالضرورة أنه سيتم إجراء التطبيق الخاص بك العثور على طريقة أخرى إلى كتابة البيانات. يعني أن التطبيق الخاص بك يحتاج أن يتوقع بأنه من المحتمل أن يكون غير قادر على كتابة البيانات ثم الاستجابة لمثل هذا الإحتمال. قد تحتاج إلى إستخدام أكثر من معالجة‏ استثناء أو بعض الكائنات في مساحة الاسم System.Security.Permissionsلجعل التعليميات البرمجية الخاصة بك أقوى. مُضمن وصف موجز من هذه الطرق في قسم لاحق من هذه المقالة "بتطوير البيئات الثقة الجزئي لـ".

يتم تعيين مستويات الأمان لمناطق بإستخدام "الأدوات الإدارية" لـ تثبيت عند تثبيت برنامج .NET Framework. لمعلومات أكثر حول إعداد مستويات الأمان للمناطق على جهاز كمبيوتر راجع أدوات الإدارة.

ثقة تامة

يعمل المطورين غالباً في بيئة فيها ثقة تامة. أنها كانت الاحتفاظ تعليمات برمجية المصدر الخاصة بها على محركات الأقراص الثابتة الخاصة بهم واختبار تطبيقاتهم من أجهزة الكمبيوتر الخاصة بهم التطوير. في بيئة الثقة الكاملة هذه أية مطور تعليمات برمجية مسموح له تشغيل كمبيوتر محلي. لا تظهر الاستثناءات السطحية لأنه يتم تعريف الكمبيوتر المحلي أنه ببيئة كاملة الثقة و بشكل افتراضي.

جزئي الثقة

تصف البيئة ذات الثقة الجزئية أي منطقة غير تامة الثقة . عند تعين التطبيق قد ينتقل إلى منطقة جديدة واحدة لا تمنح الثقة تامة في التطبيق. السيناريوهات الأكثر شيوعاً جهازي لبتي تشغل تعليمات برمجية في الثقة الجزئية هي:

  • تشغيل تعليمات برمجية التي تم تحميلها من الإنترنت.

  • تشغيل تعليمات برمجية موجودة في مشركة شبكة الاتصال شبكة اتصال (إنترانت).

بعض الأمثلة عن الموارد التي قد يتم رفضها في منطقة الثقة الجزئية:

  • ملف I/O عمليات بما في ذلك قراءة أو كتابة, إنشاء, حذفها أو طباعة الملفات.

  • مكونات النظام مثل قيم السجل أو متغيرات البيئة.

  • مكونات الخادم بما في ذلك الخدمات دليل السجل سجلات الأحداث عدّادات الأداء و قوائم انتظار الرسائل.

ما هو الغير مسموح به في الثقة الجزئية؟ لا يعتبر ذلك سهل التحديد. تحتوي سمة أمان التي تعرّف المستوى الثقة المطلوبة لكل فئة و كل أسلوب من كل فئة في .NET Framework إلى بتشغيل هذه الطريقة ثم تلك السمة قد لا يمكن الوصول إليها في وقت التشغيل نتيجة ميزات الأمان هذه فقط. منطقة المستوى لا تغير تعيينات بسيطة من مستوى الثقة إلى سمات ولكن عبارة عن مجموعة من منح فئات معينة وأساليب أذونات معينة. لن يتمكن التطبيق من الاستعلام ببساطة عن مستوى الثقة ومن ثم يتمكن بالتنبؤ أي الموارد تكون غير متوفرة. يمكنك تحديد ما إذا كان التطبيق الخاص بك قيد التشغيل في كامل الثقة. أحد الأساليب الموصوفة في المقطع التالي، "تطوير بيئات الثقة الجزئية."

تطوير بيئات الثقة الجزئية

يقدم هذا الجزء نظرة قصيرة جداً عن أهمية الأمان في التأثير على التعليمات برمجية التي تكتبها. لا يوجد حلول مفرد لتطوير بيئة الثقة الجزئية. يعتمد الحل على التطبيق الذي تقوم بكتابته. بالإضافة إلى ذلك، لأنه يمكن تغيير المستوى الثقة أثناء تنفيذ التطبيق الخاص بك, لا يمكنك ببساطة اختبار لمستوى الثقة الموجودة و من ثم المتابعة.

استثناء أمان تعليمات برمجية

أول خطوة في تطوير مناطق الثقة الجزئية هي كتابة تعليمات برمجية التي تعرف ظهور استثناءات الأمان. خذ بعين الاعتبار ‏‫التعليمات البرمجية التالية:

Public Sub MakeABitmap()
    Dim b As New System.Drawing.Bitmap(100, 100)
    ' Some code here to draw a nice picture in the bitmap
    b.Save("c:\PrettyPicture.bmp")
End Sub
public void MakeABitmap()
{
    System.Drawing.Bitmap b =
        new System.Drawing.Bitmap(100, 100);
    // Some code here to draw a nice picture in the bitmap
    b.Save("c:\\PrettyPicture.bmp");
}

يعمل هذا الأسلوب دون طرح ‏‏ استثناء إذا كان المشروع وتجميع المشروع مخزن على القرص الثابت لجهاز الكمبيوتر الخاص بك واذا كنت عضو في مجموعة المسؤولون على الكمبيوتر الخاص بك. إذا قمت بنشر هذا التطبيق على إنترانت SecurityExceptionقد يتم طرحه عندما يحاول التطبيق حفظ كائن الصورة النقطية. إذا لم يكن لديك حظر حول هذه التعليمات البرمجية حاول... التقاط... أخيراً بيان (Visual Basic)أو حاول - catch-أخيراً (C# مرجع) ، يقوم التطبيق بالإنهاء مع استثناء. من المحتمل أن لا تعد هذه خبرة مرضية للمستخدم. إذا قمت بإضافة معالجة ‏‏ استثناءات تعليمات برمجية, ثم يمكن التطبيق الخاص بك:

  • تحذير المستخدم بأن التطبيق لا يمكنه إكمال كل المهام التي يحتاجها.

  • قم بمسح أية كائنات موجودة حتى تكون التعليمات برمجية التي يتم تشغيلها بعد catch block لا تفشل.

يمكن تعديل تعليمات برمجية لحفظ الصورة النقطية كما هو موضح أدناه. التعليمات البرمجية المضافة تحذر المستخدم أنه لم يتم حفظ هذا الملف لوجود رفض أمني , و من ثم تفصل حالات فشل الأمان عن فشل الإدخال/الإخراج للملفات الأخرى مثل أسماء الملفات الغير صحيحة. لا تقوم هذه الطريقة بإنشاء أية ثقوب الأمان. سيتم إما تعديل المستخدم الأمان إلى ثقة التطبيق الخاص بك أو لن يتم تشغيل التطبيق.

Public Sub MakeABitmap()
    Dim b As System.Drawing.Bitmap = Nothing
    Try
        b = New System.Drawing.Bitmap(100, 100)
        b.Save("c:\PrettyPicture.bmp")
    Catch ex As System.Security.SecurityException
        ' Let the user know the save won't work. 
        MessageBox.Show("Permission to save the file was denied, " & 
               "and the bitmap was not saved.")
    Catch ex As System.Exception
        ' React to other exceptions here.
        MessageBox.Show("Unable to create and save the bitmap.")
    End Try
End Sub
public void MakeABitmap()
{
    System.Drawing.Bitmap b = null;

    try
    {
        b = new System.Drawing.Bitmap(100, 100);
        b.Save("c:\\PrettyPicture.bmp");
    }
    catch (System.Security.SecurityException ex)
    {
        // Let the user know the save won't work. 
        MessageBox.Show("Permission to save the file was denied, " +
            "and the bitmap was not saved.");
    }
    catch (System.Exception ex)
    {
        // React to other exceptions here.
        MessageBox.Show("Unable to create and save the bitmap.");
    }
}

فئات والسمات التعدادات من مساحة الاسم System.Security.Permissionsتدعم المزيد من التحكم في مهام الأمان في التطبيق. في حالة كتابة المكتبات التي قد يتم استدعاءها من تطبيقات أخرى ستحتاج المكتبة لتحقق من استدعاء تعليمات برمجية. على سبيل المثال، يمكنك ببساطة إضافة سمة مستو التجميع في أعلى ملف التعلمات الخاص بك أو ملف AssemblyInfo.vb أو AssemblyInfo.cs . لمزيد من المعلومات، راجع تعيين سمات التجميع.

<Assembly: System.Security.Permissions.FileIOPermissionAttribute( 
    System.Security.Permissions.SecurityAction.RequestMinimum, 
    Write:="c:\PrettyPicture.bmp")> 
[assembly: System.Security.Permissions.FileIOPermissionAttribute(
    System.Security.Permissions.SecurityAction.RequestMinimum,
    Write = "c:\\PrettyPicture.bmp")]

يتحقق وقت التشغيل الإذن عند تحميل التجميع. إذا كان وقت التشغيل يمنع الإذن المطلوب, فيفشل التجميع أن يقوم بتحميل و يتم طرح استثناء الأمان . إذا قمت بإضافة هذه السمة لتطبيق مستقل قد لا يتم تشغيل التطبيق. في حالة ظهور هذه السمة في مكتبة فئة "، قد لا تحميل المكتبة في وقت التشغيل. تحتاج إلى إضافة حظر محاولة/catch للتعليمات البرمجية التي تستدعي مكتبة الفئات.

يمكنك أيضاً وبشكل تطلب الأذونات من وقت التشغيل أدناه بإستخدام الأسلوب Demandا. ثم قد يقوم وقت التشغيل باعطاء أو رفض الحاجة. تم رفض الطلب عن طريق رفع استثناء أمان. ربما تضطر لإعادة كتابة التعليمة البرمجية كذلك لتطلب إذن بكتابة ملف صورة نقطية:

Public Sub MakeABitmap()
    Dim b As System.Drawing.Bitmap = Nothing
    Dim filename = "c:\PrettyPicture.bmp"
    Dim permission As New System.Security.Permissions.FileIOPermission( 
        System.Security.Permissions.FileIOPermissionAccess.Write, 
        filename)

    Try
        permission.Demand()
        Try
            b = New System.Drawing.Bitmap(100, 100)
            b.Save(filename)
        Catch ex As System.Exception
            MessageBox.Show("Unable to create and save the bitmap.")
        End Try
    Catch ex As System.Security.SecurityException
        ' Let the user know the save won't work. 
        MessageBox.Show("Permission to save the file was denied, " & 
               "and the bitmap was not saved.")
    Catch ex As System.Exception
        ' React to other exceptions here.
        MessageBox.Show("Other error.")
    End Try
End Sub
public void MakeABitmap()
{
    System.Drawing.Bitmap b = null;
    string filename = "c:\\PrettyPicture.bmp";

    System.Security.Permissions.FileIOPermission permission;
    permission = new System.Security.Permissions.FileIOPermission(
        System.Security.Permissions.FileIOPermissionAccess.Write, filename);

    try
    {
        permission.Demand();
        try
        {
            b = new System.Drawing.Bitmap(100, 100);
            b.Save(filename);
        }
        catch (System.Exception ex)
        {
            MessageBox.Show("Unable to create and save the bitmap.");
        }
    }
    catch (System.Security.SecurityException ex)
    {
        // Let the user know the save won't work. 
        MessageBox.Show("Permission to save the file was denied, " +
               "and the bitmap was not saved.");
    }
    catch (System.Exception ex)
    {
        // React to other exceptions here.
        MessageBox.Show("Other error.");
    }
}

الاختبار

يتم اختبار الخطوة الثانية في تطوير مناطق الثقة الجزئية في بيئات متعددة خاصة من الإنترانت وإنترنت. هذا سيفرض استثناءات الأمان ليتم طرحها. الاختبار المهم هو إنشاء حساب مستخدم على كمبيوتر محلي لا يمتلك حقوق المسؤول ثم أعد تشغيل التطبيق الخاص بك مع هذا الحساب.

راجع أيضًا:

المهام

كيفية: تشغيل تعليمات برمجية موثوق بها جزئي في الحماية

كيفية: طلب أذونات الحد الأدنى عن طريق استخدام علامة RequestMinimum

المبادئ

أمان رمز الوصول

تأمين ترميز إرشادات

تغييرات الأمان في .NET Framework 4