شرح واجهة برمجة تطبيقات وضع الحماية

تعتمد واجهة برمجة التطبيقات Sandboxed API (SAPI) على مشروع Sandbox2 الراسخ. تشرح هذه الصفحة بنية تصميم SAPI والمفاهيم الرئيسية.

نظرة عامة

تم تصميم SAPI لتزويد المطوّرين بالأدوات اللازمة لإعداد مكتبات C/C++ لوضع الحماية، فضلاً عن واجهات برمجة التطبيقات اللازمة للاتصال بإصدار وضع الحماية من مكتبات C/C++.

يوضح هذا الرسم التخطيطي بنية مكتبة C/C++ مضمَّنة في وضع حماية SAPI:

مخطط SAPI

يوفر SAPI أيضًا أساسيات لمزامنة الذاكرة اليدوية والتلقائية (بناءً على سمات المؤشر المخصصة) (المصفوفات والبنى) بين مكتبات SAPI ورمز المضيف.

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

Sandbox2

تم تطوير مشروع مفتوح المصدر Sandbox2 وصيانته من قِبل مهندسي الأمان في Google، وهو التقنية الأساسية لوضع الحماية التي تستخدمها SAPI. يحتوي Sandbox2 على ثلاثة مكوّنات رئيسية، هي سياسة وضع الحماية والتنفيذ وSandboxee.

سياسة وضع الحماية

تحدِّد سياسة وضع الحماية بيئة التنفيذ المحدودة للمكتبة التي تم وضع الحماية لها. ويتحقق ذلك من خلال توضيح استدعاءات النظام التي يمكن تنفيذها. يستخدم SAPI الآلية نفسها المتبعة في Sandbox2، ويمكنك الاطّلاع على قسم سياسة وضع الحماية وصفحة البدء في Sandbox2 لمزيد من المعلومات عن طريقة تصميم سياسة وضع الحماية وتحديدها.

يستخدم SAPI سياسة تلقائية، وبدلاً من ذلك يمكنك استخدام سياسة وضع حماية مخصّصة من خلال تعريفها في ملف عنوان sandbox.h وتمريرها كوسيطة في قاعدة إنشاء sapi_library.

مكتبة في وضع الحماية

هذه هي مكتبة C/C++ الموضوعة في وضع الحماية والتي سيتم تنفيذها في بيئة وضع الحماية المحدودة التي يوفّرها Sandbox2. وفي نهاية المطاف، تعرض "مكتبة وضع الحماية" الوظائف المطلوبة التي يمكن استهلاكها من خلال رمز المضيف.

تم إنشاء المكتبة التي في وضع الحماية باستخدام قاعدة الإصدار sapi_library، والتي يمكنك من خلالها تحديد سياسة وضع حماية مخصّصة تحدِّد بيئة التنفيذ المحدود. وبناءً على المكتبة، قد تضطر إلى كتابة رمز البرنامج أو التنويع السابق (راجع libcurl)، ولكن لا يُتوقع منك تغيير رمز المصدر لمكتبة C/C++ أثناء إعداد إصدار SAPI.

كائن SAPI وكبديل استدعاء إجراء عن بُعد (RPC)

كائن SAPI هو كائن C++ يعرض واجهة برمجة التطبيقات للمكتبة التي تم وضع الحماية لها. تعيد هذه الخدمة توجيه المكالمات من Host Code (رمز المضيف) إلى RPC Stub، المضمَّنة في مكتبة SAPI مع "مكتبة وضع الحماية".

ينشئ نظام الإصدار هذين العنصرَين تلقائيًا باستخدام قاعدة الإصدار sapi_library(). تدعم واجهة برمجة التطبيقات SAPI نظامَي تصميم، وهما Bazel وCMake من Google.

رمز المضيف

رمز المضيف هو ما يقوم بتنفيذ المنطق الذي توفره مكتبة SAPI. وهو ما قد يستهلك بخلاف ذلك الإصدار غير المحمي من مكتبة C/C++. وعلى هذا النحو، يستدعي رمز المضيف الدوال التي يتم تصديرها من خلال مكتبة SAPI، ما يؤدي إلى تمرير البيانات إلى وضع الحماية وتلقّي البيانات منه.

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

المفاهيم

قواعد إنشاء Bazel

يوفّر مشروع SAPI قاعدتَي إصدار Bazel لوضع الحماية لمكتبة C/C++ في وضع الحماية:

  • sapi_library() – تنشئ جميع المخرجات اللازمة لوضع مكتبة C/C++ في وضع الحماية على أنّها Sandbox2 Sandboxee. يمكن استخدام ناتج الإصدار كتبعية لقاعدة cc_binary() المستخدَمة لإنشاء البرنامج الثنائي لرمز المضيف.
  • sapi_interface() – تنشئ هذه الدالة تلقائيًا العنوان الذي يمكن تضمينه في البرنامج الثنائي لرمز المضيف.

للحصول على شرح أكثر شمولاً لقواعد الإصدار، يُرجى الاطّلاع على قواعد الإصدار.

المتغيرات

توفر SAPI عددًا من الأنواع الخاصة، تُسمى أنواع SAPI، والتي ننصح باستخدامها في رمز المضيف. السبب الرئيسي لحاجة أنواع SAPI هو إلى عملية المعالجة، وبالتالي الذاكرة، بين رمز المضيف والمكتبة الموضوعة في وضع الحماية.

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

المعاملات

كما هو موضح أعلاه، يتم تمرير أي استدعاء من واجهة برمجة التطبيقات إلى مكتبة في وضع الحماية عبر طبقة استدعاء إجراء عن بُعد (RPC). حتى تتمكن من التعامل مع الفشل في هذه الطبقة، يجب تنفيذ معالجة مناسبة للأخطاء. توفر وحدة معاملات SAPI الآلية اللازمة للتأكد من اكتمال جميع الطلبات الموجَّهة إلى مكتبة محمية في وضع الحماية بدون أي مشاكل على مستوى RPC، أو عرضها مع خطأ ذي صلة.

للحصول على شرح أكثر شمولاً لهذا الموضوع، يُرجى الاطّلاع على المعاملات.

البدء

اقرأ صفحة البدء لإعداد أول مشروع لواجهة برمجة التطبيقات في وضع الحماية.