الأمان ذا الثقة الجزئية الخاص ب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. بالإضافة إلى ذلك، الميزات التالية توفر أكثر معلومات تفصيلية فيما يتعلق بتنفيذ الثقة جزئي، بما في ذلك اعتبارات خاص.
XAML( إنظر نظرة عامة على XAML (WPF)).
الإطارات المنبثقة (راجع System.Windows.Controls.Primitives.Popup).
سحب وإفلات (راجع نظرة عامة حول السحب و الإفلات).
حافظة (راجع System.Windows.Clipboard).
التصوير (راجع System.Windows.Controls.Image).
عملية إنشاء تسلسل (راجع XamlReader.Load ، XamlWriter.Save).
فتح ملف مربع حوار (راجع Microsoft.Win32.OpenFileDialog).
يوضح الجدول التالي 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.