توفّر تطبيقات الويب المعزولة (IWA) نموذج أمان يتيح لتطبيقات الويب الوصول إلى إمكانات قوية، مثل Direct Sockets وControlled Frame، والتي تكون عادةً محظورة في الويب العادي. بما أنّ التطبيقات التي تعمل بدون تثبيت تعمل في بيئة عالية الثقة، يجب أن تلتزم بسياسات صارمة للأمان والخصوصية. تم تصميم هذه الإرشادات لضمان الحفاظ على أمان المستخدمين وسلامة بيئة المتصفح مع اكتساب منصة الويب المزيد من الإمكانات.
نموذج الثقة في IWA
تم تصميم أساس منصة IWA استنادًا إلى سياسات فنية صارمة تُلزم المطوّرين بالحفاظ على مستوى عالٍ من الأمان. في حين أنّ تطبيقات الويب العادية تعتمد على نموذج أذونات مرن، يتم توقيع تطبيقات الويب المعزولة (IWA) بشكل مشفّر وتسليمها باستخدام حِزم الويب، ما يتيح التحقّق من مصدرها وسلامتها.
وفي المقابل، يمكن لتطبيقات الويب المعزولة الوصول إلى واجهات برمجة التطبيقات ذات الامتيازات. للحفاظ على هذه الثقة، على المطوّرين اتّباع نهج يركّز على الأمان من خلال الالتزام بسياسات أكثر صرامة، بما في ذلك "سياسة أمان المحتوى" (CSP) و"أنواع موثوقة"، ما يضمن سلامة المستخدم حتى عند استخدام إمكانات قوية. وهذا يعني ما يلي:
- الشفافية: يجب ألا يتفاجأ المستخدمون أبدًا باستخدام التطبيق لواجهات برمجة التطبيقات ذات الامتيازات.
- الحدّ الأدنى من الامتيازات: يجب ألا تطلب التطبيقات إلا الإمكانات المحدّدة اللازمة للغرض الموضّح لها وألا تستخدم غيرها.
- التحقّق الثابت من السلامة: يجب أن تكون جميع التعليمات البرمجية القابلة للتنفيذ مضمّنة في حزمة التطبيق للسماح بمراجعة الأمان ومنع التثبيت الجانبي للتعليمات البرمجية الضارة.
على الرغم من أنّ تطبيقات الويب المثبَّتة تتضمّن وسائل حماية مدمجة قوية، مثل "سياسة أمان المحتوى" (CSP) الصارمة التي تمنع تنفيذ النصوص البرمجية الخارجية، لا يمكن أن تحدّ القيود الفنية وحدها من كل المخاطر. حتى في بيئة عالية الثقة، يمكن أن تؤدي بعض أنماط التنفيذ أو خيارات المطوّرين إلى تعريض أمان المستخدم أو خصوصيته للخطر عن غير قصد. يوضّح هذا الدليل السيناريوهات المحظورة والسياسات التي تحكم استخدام واجهات برمجة التطبيقات ذات الأذونات المميزة.
أهمية هذه الإرشادات
إنّ الالتزام بهذه السياسات لا يقتصر على الامتثال، بل يهدف أيضًا إلى إنشاء نظام بيئي مستدام لتطبيقات الويب المتقدّمة. من خلال اتّباع هذه الإرشادات، يمكنك التأكّد من أنّ تطبيقك:
- تجنُّب تراجع مستوى الأمان: يمنع هذا الإجراء الثغرات الأمنية، مثل كتابة النصوص البرمجية على مستوى الموقع الإلكتروني (XSS) وتنفيذ الرموز البرمجية عن بُعد، من خلال الحفاظ على احتواء المنطق ذاتيًا.
- حماية خصوصية المستخدم: تضمن هذه الميزة عدم التعامل مع البيانات الحساسة وإمكانية الوصول إلى الأجهزة إلا بإذن صريح من المستخدم وبشفافية.
- ضمان استمرار المنصة: يساعد في الحفاظ على معايير الأمان العالية المطلوبة لمنصة IWA لمواصلة توسيع مجموعة إمكاناتها.
المبادئ الأساسية
الشفافية واهتمامات المستخدمين
القاعدة الأساسية هي: لا تفاجئ المستخدم. يجب أن يتوافق سلوك تطبيقك مع الغرض المحدّد له وتوقّعات المستخدمين.
- الالتزام بالنطاق: لا تنفِّذ وظائف تتجاوز الغرض الواضح من تطبيقك.
- الحد الأدنى من مساحة واجهة برمجة التطبيقات: لا تطلب سوى المجموعة المحدّدة من واجهات برمجة التطبيقات على الويب المثبَّتة (IWA) اللازمة لتحقيق الوظيفة الأساسية لتطبيقك ولا تستخدم غيرها.
عدم التحميل الجانبي للرموز الديناميكية
يعتمد نموذج أمان IWA على قدرة المشرفين أو مورّد المتصفّح على التحقّق من صحة جميع التعليمات البرمجية القابلة للتنفيذ. وبالتالي، يجب أن تكون حزمة تطبيق IWA مكتفية ذاتيًا. تفرض المنصة ذلك من خلال "سياسة أمان المحتوى" (CSP) الصارمة التي تحظر التنفيذ المستند إلى السلسلة، مثل eval() وnew Function():
script-src 'self' 'wasm-unsafe-eval';
require-trusted-types-for 'script';
على الرغم من أنّ سياسة CSP تسمح 'wasm-unsafe-eval' بتوافق WebAssembly، يجب عدم تجاوز الهدف من حدود الأمان هذه.
الممارسات المحظورة تمامًا
- تضمين برامج ترجمة للرموز البرمجية المستضافة عن بُعد: لا يجوز لك تضمين برنامج لترجمة الرموز البرمجية (مثل Python أو Lua المُجمَّعة في WASM) لتنزيل وتنفيذ نصوص برمجية خارجية باستخدام إذن وصول مميّز إلى الشبكة، مثل Direct Sockets.
- المنطق الذي يتم تحميله عن بُعد: لا تستخدِم عاملي الخدمة لتضمين الرمز الذي يتم تحميله عن بُعد في مصدر تطبيق الويب المثبَّت.
- الرمز مقابل البيانات: يُسمح بتنزيل البيانات (مثل JSON)، ولكن يُعدّ تنزيل أي رمز مخصّص للتفسير أو التشغيل انتهاكًا مباشرًا للسياسة.
مبدأ الحدّ الأدنى من الأذونات المميّزة
استخدِم دائمًا واجهة برمجة التطبيقات الأقل فعالية والقادرة على إنجاز مهمة. يجب عدم استخدام واجهات برمجة التطبيقات المميزة الخاصة بتطبيقات الويب المثبَّتة (IWA) كطريقة مختصرة لتجاوز قيود الأمان أو طلبات المستخدم لواجهات برمجة تطبيقات الويب العادية. يوضّح الجدول التالي حالات الاستخدام الشائعة لمساعدتك في تحديد الوقت المناسب لاستخدام واجهات برمجة تطبيقات الويب التقليدية مقابل الإمكانات الخاصة بتطبيقات الويب المثبَّتة:
| المهمة | استخدام Web API العادية (يُنصح بها) | تجنُّب استخدام واجهة برمجة تطبيقات IWA ذات امتيازات (مقيّدة) |
|---|---|---|
| الوصول إلى محرك الأقراص الثابتة الخارجي | استخدِم File System Access API لإدخال/إخراج الملفات العادي. | لا تستخدِم WebUSB غير المقيد للوصول إلى مساحة التخزين. |
| التفاعل مع البطاقة الذكية | استخدِم Smart Card API. | لا تستخدِم WebUSB غير المقيد للبطاقات الذكية. |
| الاتصال بالأجهزة التسلسلية | استخدِم WebSerial API إذا كان ذلك كافيًا لجهازك. | تجنَّب استخدام WebUSB غير المقيد إذا كان بإمكان WebSerial تنفيذ المهمة. |
| تضمين محتوى موثوق به | استخدِم <iframe> عاديًا. |
لا تستخدِم <controlledframe> للتضمين البسيط ما لم يكن الحظر مطلوبًا. |
الإرشادات الخاصة بواجهة برمجة التطبيقات
توفّر واجهات برمجة التطبيقات لتطبيقات الويب المعزولة إمكانات قوية تكون عادةً محظورة في المتصفّح. الإرشادات العامة هي عدم استخدام هذه الميزات ذات الامتيازات بطريقة قد تفاجئ المستخدمين أو تعرّض ثقتهم وبياناتهم للخطر.
Direct Sockets API
تمنح واجهة برمجة التطبيقات Direct Sockets API إذن الوصول إلى بروتوكولَي TCP وUDP الأوليَّين، بما في ذلك الوصول إلى البث المتعدد والشبكة المحلية.
مسموح به
- إتاحة البروتوكولات المخصّصة: الاتصال بخوادم بعيدة تستخدم بروتوكولات مخصّصة لا تتوفّر لها حاليًا أي واجهة برمجة تطبيقات ويب ذات مستوى أعلى
- الحفاظ على خدمات الخلفية: الربط بخادم محدّد مسبقًا ومبرمَج بشكل ثابت يُستخدم خصيصًا لخدمات الخلفية في تطبيقك
- اكتشاف الأجهزة الأساسية: الوصول إلى الشبكة المحلية أو استخدام البث المتعدد لاكتشاف أجهزة معيّنة ذات صلة أساسية بوظيفة التطبيق (على سبيل المثال، تطبيق لتعديل الفيديوهات يحدّد موقع وحدة تخزين متصلة بالشبكة).
غير مسموح به
- مفاجأة المستخدم: تنفيذ عملية الوصول إلى الشبكة التي لا تبرّرها الوظيفة الأساسية للتطبيق بوضوح، مثل محرر نصوص يتواصل مع أجهزة الشبكة المحلية.
- فحص الشبكات بشكل عشوائي: إجراء عمليات فحص واسعة النطاق لشبكة المستخدم المحلية (على سبيل المثال، فحص المنفذ 192.168.1.0/24) لإنشاء ملف شخصي للمستخدم أو اكتشاف أجهزة غير ذات صلة
- استهداف الأجهزة المحلية: يُحظر تمامًا محاولة فحص الأجهزة الأخرى على الشبكة المحلية أو إعادة ضبطها أو مهاجمتها.
Controlled Frame API
يسمح عنصر <controlledframe> بتضمين محتوى من مصادر متعددة وتعديله، بما في ذلك إدخال النصوص البرمجية وتغيير العناوين.
مسموح به
- تبسيط واجهات المستخدم: دمج خدمة تابعة لجهة خارجية وإضافة CSS لإخفاء عناصر واجهة المستخدم غير ذات الصلة أو تقديم تجربة أكثر تكاملاً
- التوسّط في التواصل الآمن: تعمل هذه الميزة كحارس بوابة من خلال تلقّي الطلبات من الصفحة المضمَّنة التي تتضمّن
postMessage، ولا تعرض إلا البيانات الضرورية التي تمّت فلترتها والتي تمّ استرجاعها من خلال واجهات برمجة التطبيقات ذات الامتيازات.
غير مسموح به
- سرقة بيانات اعتماد المستخدم: إدخال نصوص برمجية لالتقاط كلمات المرور أو ملفات تعريف الارتباط الخاصة بالجلسة أو غيرها من بيانات المستخدم الحسّاسة من المحتوى المضمّن
- انتهاك بنود الخدمة: تعديل المنصات المضمّنة بطرق تنتهك بنود الخدمة، مثل النقر على الإعلانات آليًا أو سرقة المحتوى بدون إذن
- تفويض الوصول المميّز: إنشاء مسار مباشر يمنح المحتوى المضمّن غير الموثوق به إذن وصول مباشر أو غير خاضع للرقابة إلى واجهة برمجة تطبيقات مميّزة لتطبيقات الويب المثبَّتة.
- تنفيذ الذكاء الاصطناعي غير الخاضع للرقابة: تنفيذ إجراءات نيابةً عن مستخدم مسجّل الدخول من خلال الذكاء الاصطناعي بدون قيود محدّدة وشفافة على حالات الاستخدام
تسجيل الشاشة بدون قيود
تسمح هذه الميزة بتصوير الشاشة بدون طلب أذونات المستخدم بشكل متكرّر كما هو الحال في الويب العادي.
مسموح به
- توفير وظيفة أساسية: استخدام ميزة تسجيل الشاشة كجزء واضح من خدمة التطبيق، مثل ميزات الاجتماعات الافتراضية أو تسجيل الدروس التعليمية
- ضمان وعي المستخدمين: إبلاغ المستخدمين بوضوح بأنّه قد يتم تسجيل شاشاتهم قبل تفاعلهم مع التطبيق
غير مسموح به
- التسجيل بشكل سرّي: تسجيل شاشة المستخدم بدون علمه وموافقته الصريحَين والمسبقَين
- انتهاك لوائح الخصوصية: ممارسة أي عمليات تسجيل تخالف قوانين الخصوصية المحلية أو الدولية
WebUSB غير مقيَّد
تتجاوز ميزة WebUSB غير المقيد قائمة الحظر العادية في WebUSB للسماح بالتفاعل المنخفض المستوى مع الأجهزة.
مسموح به
- التوافق مع الأجهزة الاحتكارية: التفاعل مع الأجهزة المتخصّصة أو القديمة التي لا تتوفّر لها واجهة برمجة تطبيقات ويب عالية المستوى، مثل وحدات التحكّم الصناعية
مسموح به الآن
- تجاوز واجهات برمجة التطبيقات المخصّصة: استخدام WebUSB للأجهزة التي تتضمّن واجهة برمجة تطبيقات أكثر تحديدًا ومحدودة، مثل البطاقات الذكية (استخدام Smart Card API) أو وحدات التخزين الخارجية (استخدام File System Access API).
إدارة النوافذ (window.open وwindow.focus)
يمكن لتطبيقات الويب المعزولة إنشاء نوافذ منبثقة ونوافذ تركيز بدون إيماءة المستخدم المطلوبة على الويب العادي.
مسموح به
- إرسال إشعار عند إكمال مهمة: تركيز نافذة التطبيق عند الانتهاء من مهمة مهمة في الخلفية بدأها المستخدم، مثل عرض فيديو
غير مسموح به
- إغراق المستخدمين بالرسائل غير المرغوب فيها: إغراق المستخدم بنوافذ متعددة غير مرغوب فيها
- التصيّد الاحتيالي: فتح نوافذ مصمّمة لمحاكاة مربّعات حوار النظام أو خداع المستخدم
- استحواذ التطبيق على التركيز: مقاطعة المستخدم من خلال الاستحواذ على التركيز من تطبيقات أخرى لأحداث غير مهمة
الخاتمة
تم تصميم بنية الأمان في "تطبيقات الويب المعزولة" لتمكين المطوّرين مع الحفاظ على بيئة موثوقة للمستخدمين. من خلال الالتزام بهذه الإرشادات، يمكنك التأكّد من أنّ تطبيقك يظلّ جزءًا مسؤولاً من منظومة IWA المتكاملة. تشمل أهم النقاط الرئيسية التي يمكن استخلاصها من هذا الدليل ما يلي:
- إعطاء الأولوية للشفافية: يجب أن يتوافق سلوك تطبيقك دائمًا مع الغرض المحدّد له، ويجب ألا تنفّذ أبدًا وظائف قد تفاجئ المستخدم أو تخدعه.
- فرض سلامة الحزمة: يجب أن تكون جميع العمليات المنطقية القابلة للتنفيذ مضمّنة في حزمة التطبيق المثبَّت على الويب للسماح بالتحقّق الثابت. يُحظَّر تمامًا تجاوز نموذج الأمان من خلال التحميل الجانبي للرموز الديناميكية أو المترجمين عن بُعد.
- الالتزام بمبدأ "الامتياز الأقل": اختَر دائمًا واجهة برمجة التطبيقات الأكثر تقييدًا والمتاحة لمهمة معيّنة. يجب استخدام واجهات برمجة التطبيقات ذات الامتيازات في تطبيقات الويب المعزولة فقط عندما تكون واجهات برمجة تطبيقات الويب العادية غير كافية للوظائف الأساسية للتطبيق.
- العمل كحارس بوابة: عند استخدام أدوات قوية مثل
<controlledframe>، يجب أن يعمل تطبيق IWA كوسيط آمن بدلاً من وكيل شفاف للمحتوى غير الموثوق به.
قبل نشر تطبيق الويب المثبَّت، عليك إجراء تدقيق نهائي لعملية التنفيذ من خلال طرح الأسئلة التالية:
- هل أستخدم أبسط واجهة برمجة تطبيقات وأكثرها تقييدًا لإنجاز هذه المهمة؟
- هل سيتفاجأ المستخدم أو يشعر بالخيانة بسبب ما يفعله تطبيقي؟
إذا كانت الإجابة عن السؤال الأول هي "لا" أو عن السؤال الثاني هي "نعم"، من المحتمل أنّ تطبيقك ينتهك سياسات أمان "التطبيقات على الويب المثبَّتة" وقد تتم إزالته.