إضافة اللائحة البيضاء في كوردوفا

من موسوعة حسوب
مراجعة 19:36، 23 ديسمبر 2018 بواسطة محمد-بغات (نقاش | مساهمات) (أنشأ الصفحة ب'<noinclude>{{DISPLAYTITLE:إضافة اللائحة البيضاء في كوردوفا}}</noinclude> تصنيف: Cordova تصنيف: Plugin تقدم هذه...')
(فرق) → مراجعة أقدم | المراجعة الحالية (فرق) | مراجعة أحدث ← (فرق)

 تقدم هذه الإضافةُ سياسة اللائحة البيضاء للتنقل عبر عارض التطبيق على كورودوفا 4.0

تنبيه: تقرير عن القضايا على Apache Cordova issue tracker

التثبيت

يمكنك تثبيت إضافة اللائحة البيضاء عبر واجهة سطر الأوامر، من مُدير الحُزم npm:

$ cordova plugin add cordova-plugin-whitelist
$ cordova prepare

منصات كوردوفا المدعومة

  • أندرويد 4.0.0 أو ما فوقه

اللائحة البيضاء للتصفح (Navigation Whitelist)

تتحكم هذه اللائحة في العناوين التي يمكن للعارض أن يتصفّحها. تنطبق على تصفح المستوى الأعلى (top-level) من المواقع فقط.

ملاحظات خاصة: على منصة أندرويد، تنطبق اللائحة أيضًا على الإطارات الذكية iframe الخاصة بالخطاطات من غير http ‏(non-http schemes).

افتراضيًا، لا يُسمح سوى بتصفح العناوين file:// فقط. للسماح بعناوين URL أخرى، عليك إضافة الوسوم <allow-navigation> إلى الملف config.xml:

<!-- Allow links to example.com -->
<allow-navigation href="http://example.com/*" />
<!-- Wildcards are allowed for the protocol, as a prefix
     to the host, or as a suffix to the path -->
<allow-navigation href="*://*.example.com/*" />
<!-- A wildcard can be used to whitelist the entire network,
     over HTTP and HTTPS.
     *NOT RECOMMENDED* -->
<allow-navigation href="*" />
<!-- The above is equivalent to these three declarations -->
<allow-navigation href="http://*/*" />
<allow-navigation href="https://*/*" />
<allow-navigation href="data:*" />

اللائحة البيضاء للمقاصد (Intent Whitelist)

تتحكم هذه اللائحة في العناوين التي يُسمح للتطبيق بمطالبة النظام بفتحها. افتراضيًا، لا يُسمح بأي عناوين خارجية.

على منصة أندرويد، يكافئ ذلك إرسال مقصد (intent) من النوع BROWSEABLE.

لا تٌطبّق اللائحة البيضاء على الإضافات، وإنما تُطبق على الروابط التشعبية واستدعاءات إلى window.open().

في الملف config.xml، أضف الوسوم <allow-intent> التالية:

<!-- Allow links to web pages to open in a browser -->
<allow-intent href="http://*/*" />
<allow-intent href="https://*/*" />
<!-- Allow links to example.com to open in a browser -->
<allow-intent href="http://example.com/*" />
<!-- Wildcards are allowed for the protocol, as a prefix
     to the host, or as a suffix to the path -->
<allow-intent href="*://*.example.com/*" />
<!-- Allow SMS links to open messaging app -->
<allow-intent href="sms:*" />
<!-- Allow tel: links to open the dialer -->
<allow-intent href="tel:*" />
<!-- Allow geo: links to open maps -->
<allow-intent href="geo:*" />
<!-- Allow all unrecognized URLs to open installed apps
     *NOT RECOMMENDED* -->
<allow-intent href="*" />

اللائحة البيضاء لطلبيات الشبكة (Network Request Whitelist)

تتحكم هذه اللائحة في طلبيات (requests) الشبكة (الصور، كائنات XHRs، إلخ) المسموح بها (عن طريق خطافات كوردوفا الأصلية).

ملاحظة: نقترح عليك استخدام سياسة أمان المحتوى (انظر أدناه)، والتي هي أكثر أمانًا. هذه اللائحة البيضاء موجّهة في الغالب موجهة للمواقع التي لا تدعم سياسة أمان المحتوى (CSP).

في الملف config.xml، أضف الوسوم <access> التالية:

<!-- Allow images, xhrs, etc. to google.com -->
<access origin="http://google.com" />
<access origin="https://google.com" />
<!-- Access to the subdomain maps.google.com -->
<access origin="http://maps.google.com" />
<!-- Access to all the subdomains on google.com -->
<access origin="http://*.google.com" />
<!-- Enable requests to content: URLs -->
<access origin="content:///*" />
<!-- Don't block any requests -->
<access origin="*" />

إذا لم يُضف أيُّ وسم <access>، فلن يُسمح إلا لطلبيات عناوين file://. لكنّ التطبيق الافتراضي لكوروفا يتضمّن <access origin="*"> بشكل افتراضي.

ملاحظة: لا يمكن لللائحة البيضاء حظر عمليات إعادة التوجيه من موقع بعيد (أي http أو https) مُدرجٍ في اللائحة البيضاء إلى موقع غير مدرج في اللائحة البيضاء. استخدم قواعد سياسة أمان المحتوى (CSP) للتقليل من عمليات إعادة التوجيه إلى المواقع غير المدرجة في اللائحة البيضاء للعوارض التي تدعم سياسة أمان المحتوى.

ملاحظات خاصة: يسمح أندرويد أيضًا الطلبيات المُوجّهة إلى الموقع https://ssl.gstatic.com/accessibility/javascript/android/ بشكل افتراضي، نظرًا لأنّه هذا الموقع ضروري لكي يشتغل تطبيق TalkBack بالشكل الصحيح.

سياسة أمن المحتوى

تحدد طلبيات الشبكة (الصور، كائنات XHRs، إلخ) المسموح بها (عبر العارض مباشرة).

على منصتي أندرويد و iOS، لا يمكن لللائحة البيضاء لطلبيات الشبكة (انظر أعلاه) تصفية جميع أنواع الطلبيات (على سبيل المثال، لا يتم حظر <video> & WebSockets). لذا، فبالإضافة إلى اللائحة البيضاء، يجب عليك استخدام وسم Content Security Policy <meta> في جميع صفحاتك.

على أندرويد، يبدأ دعم CSP ضمن العارض النظامي مع إصدار KitKat (ولكنه متاح في جميع الإصدارات باستخدام الإضافة Crosswalk WebView).

فيما يلي بعض الأمثلة عن إعلانات سياسة أمان المحتوى (CSP) لصفحات .html الخاصة بك:

<!-- Good default declaration:
    * gap: is required only on iOS (when using UIWebView) and is needed for JS->native communication
    * https://ssl.gstatic.com is required only on Android and is needed for TalkBack to function properly
    * Disables use of eval() and inline scripts in order to mitigate risk of XSS vulnerabilities. To change this:
        * Enable inline JS: add 'unsafe-inline' to default-src
        * Enable eval(): add 'unsafe-eval' to default-src
-->
<meta http-equiv="Content-Security-Policy" content="default-src 'self' data: gap: https://ssl.gstatic.com; style-src 'self' 'unsafe-inline'; media-src *">
<!-- Allow everything but only from the same origin and foo.com -->
<meta http-equiv="Content-Security-Policy" content="default-src 'self' foo.com">
<!-- This policy allows everything (eg CSS, AJAX, object, frame, media, etc) except that 
    * CSS only from the same origin and inline styles,
    * scripts only from the same origin and inline styles, and eval()
-->
<meta http-equiv="Content-Security-Policy" content="default-src *; style-src 'self' 'unsafe-inline'; script-src 'self' 'unsafe-inline' 'unsafe-eval'">
<!-- Allows XHRs only over HTTPS on the same domain. -->
<meta http-equiv="Content-Security-Policy" content="default-src 'self' https:">
<!-- Allow iframe to https://cordova.apache.org/ -->
<meta http-equiv="Content-Security-Policy" content="default-src 'self'; frame-src 'self' https://cordova.apache.org">

مصادر