مشاركة عبر


الأمان ذا الثقة الجزئية الخاص بWPF

بشكل عام، يجب أن تكون تطبيقات الإنترنت مقيدة من الوصول المباشر لموارد النظام الهامة, لمنع التلف الضار. افتراضياً، HTML و لغات البرمجة النصية من جانب العميل لا يمكنها الوصول إلى موارد النظام الهامة. لأن Windows Presentation Foundation (WPF) يمكن بدء تشغيل تطبيقات استضافة المستعرض من المستعرض ، يجب أن تتوافق مع مجموعة مشابهة من القيود. لفرض هذه القيود ، WPF يعتمد على كلا أمان الوصول إلى التعليمات البرمجية (CAS) و ClickOnce (راجع استراتيجية أمان WPF - أمان النظام الأساسي). بواسطة طلب التطبيقات مستضاف من قبل مستعرض الافتراضي، منطقة إنترنت CASالتعيين أذونات، بصرف النظر عن ما إذا كانت يتم تشغيل من الإنترنت أو شبكة انترانت محلية، أو في جهاز كمبيوتر محلي. التطبيقات التي يتم تشغيلها بأي شيء أقل من مجموعة الأذون الكاملة تعتبر قيد التشغيل بثقة جزئية.

WPF يوفر تشكيلة واسعة من الدعم للتأكد من أن قدر ممكن من الوظائف يمكن استخدامها بأمان في بيئة عمل ذات ثقة جزئية و معCAS يوفر دعم إضافي لبرمجة ثقة جزئية.

يشمل هذا الموضوع على الأقسام التالية.

  • WPF توفر دعم الثقة الجزئية

  • برمجة الثقة الجزئية

  • إدارة الأذونات

WPF توفر دعم الثقة الجزئية

يسرد الجدول التالي ميزات عالية المستوى Windows Presentation Foundation (WPF)التي تكون آمنة إلى استخدام حدود لإنترنت منطقة إذن مجموعة.

الجدول 1: ميزات WPF الآمنة في "الثقة الجزئية"

منطقة الميزات

الميزة

عام

نافذة المستعرض

موقع اتصال بالأصل

IsolatedStorage (حد 512 كيلو بايت)

موفرو UIAutomation

الأوامر

محررات أسلوب الإدخال (IMEs)

لوحي إبرة الفونوغراف و الحبر

محاكاة السحب / إفلات باستخدام التقاط الماوس و تحريك الأحداث

OpenFileDialog

إلغاء التسلسل XAML (عبر XamlReader.Load)

تكامل ويب

حوار تحميل المستعرض

التنقل بالمستوى الأعلى الذي بدأه المستخدم‬

mailto:links

معلمات معرف موارد منتظم

HTTPWebRequest

محتوى WPF مَضيف في IFRAME

استضافة نفس صفحات الموقع HTML باستخدام الإطار

استضافة نفس صفحات الموقع HTML باستخدام مستعرض

خدمات الويب( ASMX )

خدمات ويب (باستخدام Windows Communication Foundation)

برمجة

نموذج مستند الكائن

الصور

ثنائي الأبعاد و ثلاثي الأبعاد‬

الرسومات المتحركة

الوسائط (الموقع من أصل و عبر المجال)

تصوير/ الصوت/الفيديو

القراءة

FlowDocuments

مستندات XPS

خطوط النظام و مضمنة

CFF و خطوط TrueType

التحرير

التدقيق الإملائي

RichTextBox

نص عادي و دعم حافظة الحبر

لصق بدأه المستخدم

نسخ المحتوى المحدد

عناصر التحكم

عناصر التحكم العامة

يغطي هذا الجدول WPF الميزات في مستوى عالي. للحصول على معلومات مفصّلة أكثر عدة تطوير برامج Windows (SDK) تحتفظ بالإذن الذي يتطلبه كل عضو في WPF. بالإضافة إلى ذلك، الميزات التالية توفر أكثر معلومات تفصيلية فيما يتعلق بتنفيذ الثقة جزئي، بما في ذلك اعتبارات خاص.

يوضح الجدول التالي WPFميزات غير الأمن إلى تشغيل داخل حدود إنترنت منطقة إذن مجموعة.

الجدول 2: ميزات WPF الغير آمنة في الثقة الجزئية

منطقة الميزات

الميزة

عام

نافذة (نوافذ معرفة من قبل التطبيقات ومربعات الحوار)

SaveFileDialog

نظام الملفات

اتصال التسجيل

سحب و إفلات

إنشاء تسلسل XAML (عبر XamlWriter.Save)

عملاء UIAutomation

اتصال نافذة المصدر (HwndHost)

دعم الكلام الكامل

إمكانية التشغيل التفاعلي ل Windows Forms

الصور

تأثيرات الصورة النقطية

ترميز الصورة

التحرير

حافظة تنسيق نص منسق

دعم XAML كامل

برمجة الثقة الجزئية

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

منطقة الأمان

السلوك

الحصول على ثقة تامة

كمبيوتر محلي

ثقة تامة تلقائية

ليس مطلوبًا اتخاذ أي إجراءات.

إنترانت و المواقع الموثوق بها

المطالبة بثقة تامة

تسجيل XBAP بشهادة بحيث يشاهد المستخدم المصدر في موجه الأوامر.

إنترنت

يفشل مع "لم يتم منح الثقة"

تسجيل XBAP بشهادة.

ملاحظةملاحظة

سلوك هو موضح في الجدول السابق كامل الثقة XBAPs التي لا تتبع الطراز ClickOnce توزيع الموثوق بها.

في تعليمات برمجية العامة، قد تجاوز permهوsions المسموح بها هو أن تكون الشائعة تعليمات برمجية التي هو المشتركة بين التطبيقات التي تتم استضافتها مستعرض ومستقل. CASوWPFتقدم عدة أساليب إدارة هذا السيناريو.

الكشف عن الإذن باستخدام CAS

في بعض الحالات، من الممكن للتعليمات البرمجية المشتركة في تجميعات المكتبة ليتم استخدامها بواسطة كل من التطبيقات المستقلة و تطبيقات XBAP. في هذه الحالات، قد تقوم التعليمات البرمجية بتنفيذ الوظيفة التي قد تتطلب أذونات أكثر من ما تسمح به مجموعة الأذونات المعطاة. يمكن اكتشاف إذا كان التطبيق الخاص بك يحتوي أم لا على إذن معين باستخدام Microsoft NET Framewor. الأمان. وبوجه خاص، فإنه يمكن اختبار ما إذا كان يحتوي على إذن محدد عن طريق استدعاء Demand الأسلوب على مثيل الإذن المطلوب. هذا يظهر في المثال التالي الذي يحتوي على استعلامات التعليمات البرمجية ما إذا كان لديه القدرة لحفظ ملف على القرص المحلي:


Imports System.IO ' File, FileStream, StreamWriter
Imports System.IO.IsolatedStorage ' IsolatedStorageFile
Imports System.Security ' CodeAccesPermission, IsolatedStorageFileStream
Imports System.Security.Permissions ' FileIOPermission, FileIOPermissionAccess
Imports System.Windows ' MessageBox

Namespace SDKSample
    Public Class FileHandling
        Public Sub Save()
            If IsPermissionGranted(New FileIOPermission(FileIOPermissionAccess.Write, "c:\newfile.txt")) Then
                ' Write to local disk
                Using stream As FileStream = File.Create("c:\newfile.txt")
                Using writer As New StreamWriter(stream)
                    writer.WriteLine("I can write to local disk.")
                End Using
                End Using
            Else
                MessageBox.Show("I can't write to local disk.")
            End If
        End Sub

        ' Detect whether or not this application has the requested permission
        Private Function IsPermissionGranted(ByVal requestedPermission As CodeAccessPermission) As Boolean
            Try
                ' Try and get this permission
                requestedPermission.Demand()
                Return True
            Catch
                Return False
            End Try
        End Function



...


    End Class
End Namespace
using System.IO; // File, FileStream, StreamWriter
using System.IO.IsolatedStorage; // IsolatedStorageFile
using System.Security; // CodeAccesPermission, IsolatedStorageFileStream
using System.Security.Permissions; // FileIOPermission, FileIOPermissionAccess
using System.Windows; // MessageBox

namespace SDKSample
{
    public class FileHandling
    {
        public void Save()
        {
            if (IsPermissionGranted(new FileIOPermission(FileIOPermissionAccess.Write, @"c:\newfile.txt")))
            {
                // Write to local disk
                using (FileStream stream = File.Create(@"c:\newfile.txt"))
                using (StreamWriter writer = new StreamWriter(stream))
                {
                    writer.WriteLine("I can write to local disk.");
                }
            }
            else
            {
                MessageBox.Show("I can't write to local disk.");
            }
        }

        // Detect whether or not this application has the requested permission
        bool IsPermissionGranted(CodeAccessPermission requestedPermission)
        {
            try
            {
                // Try and get this permission
                requestedPermission.Demand();
                return true;
            }
            catch
            {
                return false;
            }
        }



...


    }
}

إذا لم يكن لدى من المطلوب لتطبيق إذن، استدعاء Demandطرح استثناء الأمان. وإلا، قد تم منح الإذن. IsPermissionGrantedتغليف هذا سلوك وإرجاعtrueأوfalseكـ المناسبة.

انخفاض أداء آمن من الوظيفة

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


Imports System.IO ' File, FileStream, StreamWriter
Imports System.IO.IsolatedStorage ' IsolatedStorageFile
Imports System.Security ' CodeAccesPermission
Imports System.Security.Permissions ' FileIOPermission, FileIOPermissionAccess
Imports System.Windows ' MessageBox

Namespace SDKSample
    Public Class FileHandlingGraceful
        Public Sub Save()
            If IsPermissionGranted(New FileIOPermission(FileIOPermissionAccess.Write, "c:\newfile.txt")) Then
                ' Write to local disk
                Using stream As FileStream = File.Create("c:\newfile.txt")
                Using writer As New StreamWriter(stream)
                    writer.WriteLine("I can write to local disk.")
                End Using
                End Using
            Else
                ' Persist application-scope property to 
                ' isolated storage
                Dim storage As IsolatedStorageFile = IsolatedStorageFile.GetUserStoreForApplication()
                Using stream As New IsolatedStorageFileStream("newfile.txt", FileMode.Create, storage)
                Using writer As New StreamWriter(stream)
                    writer.WriteLine("I can write to Isolated Storage")
                End Using
                End Using
            End If
        End Sub

        ' Detect whether or not this application has the requested permission
        Private Function IsPermissionGranted(ByVal requestedPermission As CodeAccessPermission) As Boolean
            Try
                ' Try and get this permission
                requestedPermission.Demand()
                Return True
            Catch
                Return False
            End Try
        End Function



...


    End Class
End Namespace
using System.IO; // File, FileStream, StreamWriter
using System.IO.IsolatedStorage; // IsolatedStorageFile
using System.Security; // CodeAccesPermission
using System.Security.Permissions; // FileIOPermission, FileIOPermissionAccess
using System.Windows; // MessageBox

namespace SDKSample
{
    public class FileHandlingGraceful
    {
        public void Save()
        {
            if (IsPermissionGranted(new FileIOPermission(FileIOPermissionAccess.Write, @"c:\newfile.txt")))
            {
                // Write to local disk
                using (FileStream stream = File.Create(@"c:\newfile.txt"))
                using (StreamWriter writer = new StreamWriter(stream))
                {
                    writer.WriteLine("I can write to local disk.");
                }
            }
            else
            {
                // Persist application-scope property to 
                // isolated storage
                IsolatedStorageFile storage = IsolatedStorageFile.GetUserStoreForApplication();
                using (IsolatedStorageFileStream stream = 
                    new IsolatedStorageFileStream("newfile.txt", FileMode.Create, storage))
                using (StreamWriter writer = new StreamWriter(stream))
                {
                    writer.WriteLine("I can write to Isolated Storage");
                }
            }
        }

        // Detect whether or not this application has the requested permission
        bool IsPermissionGranted(CodeAccessPermission requestedPermission)
        {
            try
            {
                // Try and get this permission
                requestedPermission.Demand();
                return true;
            }
            catch
            {
                return false;
            }
        }



...


    }
}

في كثير من الحالات، يجب أن تتمكن من العثور على بديل ثقة جزئية.

في بيئة يتم التحكم بها مثل إنترانت ، يمكن تثبيت Framework مخصص الذي تم إدارته عبر أساس العميل إلى مخزن التجميع العمومي المؤقت (GAC). هذه المكتبات ويمكن ينفذ تعليمات برمجية التي تتطلب الثقة تامة، ويمكن الرجوع إليها من التطبيقات التي يسمح فقط الثقة جزئي باستخدام AllowPartiallyTrustedCallersAttribute(for المزيد معلومات, seeأمن WPFواستراتيجية أمان WPF - أمان النظام الأساسي).

كشف مضيف المستعرض

باستخدام CAS للتحقق من الأذونات أسلوب مناسب عند الحاجة إلى التحقق لكل إذن. تشغيل الرغم من أن، هذه التقنية تعتمد تشغيل الاستثناءات catching كجزء من العادي معالجة، الذي لا ينصح بشكل عام وقد تواجهك مشكلات في الأداء. بدلاً من ذلك، إذا كان تطبيق مستعرض XAML (XBAP)يعمل ضمن إليه تحديد الصلاحيات لمنطقة إنترنت فقط، يمكنك استخدم BrowserInteropHelper.IsBrowserHostedخاصية، إرجاع صحيحاً ل تطبيقات مستعرض XBAP (XBAP).

ملاحظةملاحظة

IsBrowserHosteddهوtinguهوhes فقط ما إذا كان تطبيق هو قيد التشغيل في مستعرض، وعدم تعيينها ل permهوsions تطبيق هو يعمل مع.

إدارة الأذونات

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

الجدول 3: إذن LocalIntranet و إنترنت

الإذن

السمة

LocalIntranet

إنترنت

DNS

الوصول لخادم DNS

نعم

لا

متغيرات البيئة

قراءة

نعم

لا

حوار ملف

فتح

نعم

نعم

حوار ملف

غير مقيد

نعم

لا

التخزين المعزول

عزل التجميع بواسطة المستخدم

نعم

لا

التخزين المعزول

عزل غير معروف

نعم

نعم

التخزين المعزول

حصة نسبية غير محدودة للمستخدم

نعم

لا

الوسائط

صوت و فيديو و صور آمنة

نعم

نعم

طباعة

طباعة افتراضية

نعم

لا

طباعة

طباعة آمنة

نعم

نعم

انعكاس

الإرسال

نعم

لا

الأمان

تنفيذ التعليمات البرمجية المُدارة

نعم

نعم

الأمان

تأكيد الأذونات المعطاة

نعم

لا

واجهة المستخدم

غير مقيد

نعم

لا

واجهة المستخدم

نوافذ مستوى-أعلى آمنة

نعم

نعم

واجهة المستخدم

الحافظة الخاصة

نعم

نعم

مستعرض الويب

التنقل الآمن من الإطارات إلى HTML

نعم

نعم

ملاحظةملاحظة

قص ولصق هو يسمح فقط بثقة جزئي عند بدء مستخدم.

إذا كنت تحتاج زيادة الأذونات, ستحتاج لتغيير إعدادات المشروع و بيان التطبيق ClickOnce. لمزيد من المعلومات، راجع نظرة عامة حول تطبيقات مستعرض WPF XAML. قد تكون مستندات التالية مفيدة أيضا.

إذا كان لديك XBAP تتطلب ثقة كاملة، يمكنك استخدام الأدوات نفسها لزيادة الأذونات المطلوبة. تشغيل الرغم من أن XBAPفقط ستتلقى الثقة كاملة إذا هو مثبت تشغيل وتشغيل من جهاز كمبيوتر محلي، والإنترانت، أو من محدد موقع معلومات الذي هو lهوted في مستعرض الخاص الموثوق بها أو السماح بالمواقع. إذا كان تطبيق هو تثبيت من الإنترانت أو موقع موثوق به، مستخدم سوف تتلقى المطالبة ClickOnce القياسية إعلامهم permهوsions مرتفعة. يمكن للمستخدم اختيار متابعة أو إلغاء التثبيت. 

بدلاً من ذلك، يمكنك استخدام الطراز ClickOnce توزيع الموثوق به لتوزيع "الثقة تامة" من أي منطقة من مناطق الأمان. للمزيد من المعلومات، راجع نظرة عامة على نشر التطبيق موثوق به وأمن WPF.

راجع أيضًا:

المبادئ

أمن WPF

استراتيجية أمان WPF - أمان النظام الأساسي

استراتيجية أمان WPF - هندسة الأمان