الفرق بين المراجعتين لصفحة: «Cordova/cordova plugin whitelist»
أنشأ الصفحة ب'<noinclude>{{DISPLAYTITLE:إضافة اللائحة البيضاء في كوردوفا}}</noinclude> تصنيف: Cordova تصنيف: Plugin تقدم هذه...' |
لا ملخص تعديل |
||
سطر 1: | سطر 1: | ||
<noinclude>{{DISPLAYTITLE:إضافة اللائحة البيضاء في كوردوفا}}</noinclude> | <noinclude>{{DISPLAYTITLE:إضافة اللائحة البيضاء في كوردوفا}}</noinclude> | ||
[[تصنيف: Cordova]] | [[تصنيف: Cordova]] | ||
[[تصنيف: Plugin]] | [[تصنيف: Plugin]] | ||
تقدم هذه الإضافةُ | تقدم هذه الإضافةُ (<code>cordova-plugin-whitelist</code>) اللوائح البيضاء التي تحدد كيفية التصفح عبر [[Cordova/webviews|عوارض]] التطبيقات على كورودوفا 4.0 | ||
== التثبيت == | |||
يمكنك تثبيت إضافة اللائحة البيضاء عبر [[Cordova/cli|واجهة سطر الأوامر]]، من مُدير الحُزم npm: | يمكنك تثبيت إضافة اللائحة البيضاء عبر [[Cordova/cli|واجهة سطر الأوامر]]، من مُدير الحُزم npm: | ||
<syntaxhighlight lang=" | <syntaxhighlight lang="shell">$ cordova plugin add cordova-plugin-whitelist | ||
$ cordova prepare</syntaxhighlight> | $ cordova prepare</syntaxhighlight> | ||
== | == المنصات المدعومة == | ||
* أندرويد 4.0.0 أو ما فوقه | * أندرويد 4.0.0 أو ما فوقه | ||
== | == لوائح التصفح البيضاء (Navigation Whitelists) == | ||
تتحكم هذه اللائحة في العناوين التي يمكن لل[[Cordova/webviews|عارض]] أن يتصفّحها. | تتحكم هذه اللائحة في العناوين التي يمكن لل[[Cordova/webviews|عارض]] أن يتصفّحها. وتنطبق على تصفح المستوى الأعلى (top-level) من المواقع فقط. | ||
ملاحظات خاصة: على منصة أندرويد، تنطبق اللائحة أيضًا على الإطارات الذكية iframe الخاصة بالخطاطات من غير http (non-http schemes). | '''ملاحظات خاصة''': على منصة أندرويد، تنطبق اللائحة أيضًا على الإطارات الذكية <code>iframe</code> الخاصة بالخطاطات من غير http (non-http schemes). | ||
افتراضيًا، لا يُسمح سوى بتصفح العناوين <code>file://</code> فقط. للسماح | افتراضيًا، لا يُسمح سوى بتصفح العناوين <code>file://</code> فقط. للسماح بالعناوين الأخرى، عليك إضافة الوسوم <code><allow-navigation></code> إلى الملف <code>[[Cordova/config ref|config.xml]]</code>: | ||
<syntaxhighlight lang=" | <syntaxhighlight lang="xml"><!-- example.com إضافة الروابط المُوجّهة إلى الموقع --> | ||
<allow-navigation href="http://example.com/*" /> | <allow-navigation href="http://example.com/*" /> | ||
<!-- | <!-- يُسمح باستخدام الرمز العام "*" في البروتوكول، كبادئة للمُضيف، أو كلاحقة على المسار --> | ||
<allow-navigation href="*://*.example.com/*" /> | <allow-navigation href="*://*.example.com/*" /> | ||
<!-- | |||
<!-- يمكن استخدام المحرف العام "*" لإدراج كامل الشبكة في اللائحة البيضاء | |||
HTTP و HTTPS مع | |||
*لا يُنصح به* --> | |||
<allow-navigation href="*" /> | <allow-navigation href="*" /> | ||
<!-- | <!-- ما ورد أعلاه مكافئ للتصريحات الثلاثة التالية --> | ||
<allow-navigation href="http://*/*" /> | <allow-navigation href="http://*/*" /> | ||
<allow-navigation href="https://*/*" /> | <allow-navigation href="https://*/*" /> | ||
<allow-navigation href="data:*" /></syntaxhighlight> | <allow-navigation href="data:*" /></syntaxhighlight> | ||
== اللائحة البيضاء للمقاصد (Intent Whitelist) == | |||
تتحكم هذه اللائحة في العناوين التي يُسمح للتطبيق بمطالبة النظام بفتحها. افتراضيًا، لا يُسمح بأي عناوين خارجية. | تتحكم هذه اللائحة في العناوين التي يُسمح للتطبيق بمطالبة النظام بفتحها. افتراضيًا، لا يُسمح بأي عناوين خارجية. | ||
على منصة أندرويد، يكافئ ذلك إرسال مقصد (intent) من النوع BROWSEABLE. | على منصة أندرويد، يكافئ ذلك إرسال مقصد (intent) من النوع <code>BROWSEABLE</code>. | ||
لا تٌطبّق اللائحة البيضاء على الإضافات، وإنما تُطبق على الروابط التشعبية واستدعاءات | لا تٌطبّق اللائحة البيضاء على الإضافات، وإنما تُطبق على الروابط التشعبية واستدعاءات التابع<code>window.open()</code>. | ||
في الملف <code>config.xml</code>، أضف الوسوم <code><allow-intent></code> التالية: | في الملف <code>[[Cordova/config ref|config.xml]]</code>، أضف الوسوم <code><allow-intent></code> التالية: | ||
<syntaxhighlight lang=" | <syntaxhighlight lang="xml"><!-- السماح بفتح الروابط الموجهة إلى المواقع في المتصفح --> | ||
<allow-intent href="http://*/*" /> | <allow-intent href="http://*/*" /> | ||
<allow-intent href="https://*/*" /> | <allow-intent href="https://*/*" /> | ||
<!-- | <!-- في المتصفح example.com السماح بفتح الروابط الموجهة إلى --> | ||
<allow-intent href="http://example.com/*" /> | <allow-intent href="http://example.com/*" /> | ||
<!-- | <!-- المحرف العام "*" مسموح باستخدامه لأجل البروتوكول، كبادئة للمضيف، أو كلاحقة على المسار --> | ||
<allow-intent href="*://*.example.com/*" /> | <allow-intent href="*://*.example.com/*" /> | ||
<!-- | <!-- messaging app أن تُفتح في تطبيق المراسلة SMS السماح بروابط الرسائل --> | ||
<allow-intent href="sms:*" /> | <allow-intent href="sms:*" /> | ||
<!-- | <!-- dialer في جهاز tel: السماح بأن تُفتح روابط --> | ||
<allow-intent href="tel:*" /> | <allow-intent href="tel:*" /> | ||
<!-- Allow geo: links to open maps --> | <!-- Allow geo: links to open maps --> | ||
<!-- في الخرائط geo: السماح بأن تُفتح روابط --> | |||
<allow-intent href="geo:*" /> | <allow-intent href="geo:*" /> | ||
<!-- | <!-- السماح بالعناوين غير المعروفة بأن تفتح التطبيقات المثبتة | ||
*لا يُنصح به* --> | |||
<allow-intent href="*" /></syntaxhighlight> | <allow-intent href="*" /></syntaxhighlight> | ||
=== اللائحة البيضاء لطلبيات الشبكة (Network Request Whitelist) === | === اللائحة البيضاء لطلبيات الشبكة (Network Request Whitelist) === | ||
تتحكم هذه اللائحة في طلبيات (requests) الشبكة (الصور، كائنات XHRs، إلخ) المسموح بها (عن طريق خطافات كوردوفا الأصلية). | تتحكم هذه اللائحة في طلبيات (requests) الشبكة (الصور، كائنات XHRs، إلخ) المسموح بها (عن طريق [[Cordova/hooks|خطافات]] كوردوفا الأصلية). | ||
ملاحظة: نقترح عليك استخدام سياسة أمان المحتوى (انظر أدناه)، والتي هي أكثر أمانًا. | '''ملاحظة''': نقترح عليك استخدام سياسة أمان المحتوى (انظر أدناه)، والتي هي أكثر أمانًا. فهذه اللائحة البيضاء موجّهة في الغالب للمواقع التي لا تدعم سياسة أمان المحتوى (CSP). | ||
في الملف <code>config.xml</code>، أضف الوسوم <code><access></code> التالية: | في الملف <code>[[Cordova/config ref|config.xml]]</code>، أضف الوسوم <code><access></code> التالية: | ||
<syntaxhighlight lang=" | <syntaxhighlight lang="xml"><!-- google.com وغير ذلك إلى الموقع xhrs إتاحة الصور و --> | ||
<access origin="http://google.com" /> | <access origin="http://google.com" /> | ||
<access origin="https://google.com" /> | <access origin="https://google.com" /> | ||
<!-- | <!-- maps.google.com الدخلول إلى النطاق الفرعي --> | ||
<access origin="http://maps.google.com" /> | <access origin="http://maps.google.com" /> | ||
<!-- | <!-- google.com الدخول إلى كافة النطاقات الفرعية للموقع --> | ||
<access origin="http://*.google.com" /> | <access origin="http://*.google.com" /> | ||
<!-- | <!-- إتاحة طلبيات المحتوى إلى المواقع --> | ||
<access origin="content:///*" /> | <access origin="content:///*" /> | ||
<!-- | <!-- عدم تعطيل أي طلبية --> | ||
<access origin="*" /></syntaxhighlight> | <access origin="*" /></syntaxhighlight> | ||
إذا لم يُضف أيُّ وسم <code><access></code>، فلن يُسمح إلا | إذا لم يُضف أيُّ وسم <code><access></code> إلى الملف <code>[[Cordova/config ref|config.xml]]</code>، فلن يُسمح إلا بالطلبيات الموجهة لعناوين <code>file://</code>. إلا أنّ التطبيق الافتراضي لكوردوفا يتضمّن الوسم <code><access origin="*"></code> بشكل افتراضي. | ||
ملاحظة: لا يمكن | '''ملاحظة''': لا يمكن للائحة البيضاء حظر عمليات إعادة التوجيه من موقع بعيد (أي http أو https) مُدرجٍ في اللائحة البيضاء إلى موقع غير مدرج فيها. استخدم قواعد سياسة أمان المحتوى (CSP) للتقليل من عمليات إعادة التوجيه إلى المواقع غير المدرجة في اللائحة البيضاء في [[Cordova/webviews|العوارض]] التي تدعم سياسة أمان المحتوى. | ||
ملاحظات خاصة: | '''ملاحظات خاصة''': تسمح منصة أندرويد أيضًا بالطلبيات المُوجّهة إلى الموقع https://ssl.gstatic.com/accessibility/javascript/android/ بشكل افتراضي، نظرًا لكون هذا الموقع ضروريًا لكي يشتغل تطبيق TalkBack بالشكل الصحيح. | ||
=== سياسة أمن المحتوى (Content Security Policy) === | |||
تحدد | تحدد سياسةُ أمن المحتوى طلبياتِ الشبكة (الصور، كائنات XHRs، إلخ) المسموح بها (عبر [[Cordova/webviews|العارض]] مباشرة). | ||
على منصتي أندرويد و iOS، لا يمكن | على منصتي أندرويد و iOS، لا يمكن للائحة البيضاء لطلبيات الشبكة (network request whitelist) (انظر أعلاه) تصفية جميع أنواع الطلبيات (على سبيل المثال، لا يتم حظر <code><video></code> و WebSockets). لذلك، فبالإضافة إلى اللائحة البيضاء، يجب عليك استخدام وسم [http://content-security-policy.com/ سياسة أمن المحتوى] <code><meta></code> في جميع صفحاتك. | ||
على أندرويد، | على منصة أندرويد، بدأ دعم سياسةُ أمن المحتوى ضمن [[Cordova/webviews|العارض]] النظامي (system webview) مع إصدار KitKat (ولكنه متاح في جميع الإصدارات عبر الإضافة [https://github.com/crosswalk-project/cordova-plugin-crosswalk-webview Crosswalk WebView]). | ||
فيما يلي بعض الأمثلة عن إعلانات سياسة أمان المحتوى (CSP) لصفحات <code>.html</code> | فيما يلي بعض الأمثلة عن إعلانات سياسة أمان المحتوى (CSP) لصفحات <code>.html</code>: | ||
<syntaxhighlight lang="javascript"><!-- Good default declaration: | <syntaxhighlight lang="javascript"><!-- Good default declaration: | ||
* gap: is required only on iOS (when using UIWebView) and is needed for JS->native communication | * gap: is required only on iOS (when using UIWebView) and is needed for JS->native communication |
مراجعة 21:09، 23 ديسمبر 2018
تقدم هذه الإضافةُ (cordova-plugin-whitelist
) اللوائح البيضاء التي تحدد كيفية التصفح عبر عوارض التطبيقات على كورودوفا 4.0
التثبيت
يمكنك تثبيت إضافة اللائحة البيضاء عبر واجهة سطر الأوامر، من مُدير الحُزم npm:
$ cordova plugin add cordova-plugin-whitelist
$ cordova prepare
المنصات المدعومة
- أندرويد 4.0.0 أو ما فوقه
تتحكم هذه اللائحة في العناوين التي يمكن للعارض أن يتصفّحها. وتنطبق على تصفح المستوى الأعلى (top-level) من المواقع فقط.
ملاحظات خاصة: على منصة أندرويد، تنطبق اللائحة أيضًا على الإطارات الذكية iframe
الخاصة بالخطاطات من غير http (non-http schemes).
افتراضيًا، لا يُسمح سوى بتصفح العناوين file://
فقط. للسماح بالعناوين الأخرى، عليك إضافة الوسوم <allow-navigation>
إلى الملف config.xml
:
<!-- example.com إضافة الروابط المُوجّهة إلى الموقع -->
<allow-navigation href="http://example.com/*" />
<!-- يُسمح باستخدام الرمز العام "*" في البروتوكول، كبادئة للمُضيف، أو كلاحقة على المسار -->
<allow-navigation href="*://*.example.com/*" />
<!-- يمكن استخدام المحرف العام "*" لإدراج كامل الشبكة في اللائحة البيضاء
HTTP و HTTPS مع
*لا يُنصح به* -->
<allow-navigation href="*" />
<!-- ما ورد أعلاه مكافئ للتصريحات الثلاثة التالية -->
<allow-navigation href="http://*/*" />
<allow-navigation href="https://*/*" />
<allow-navigation href="data:*" />
اللائحة البيضاء للمقاصد (Intent Whitelist)
تتحكم هذه اللائحة في العناوين التي يُسمح للتطبيق بمطالبة النظام بفتحها. افتراضيًا، لا يُسمح بأي عناوين خارجية.
على منصة أندرويد، يكافئ ذلك إرسال مقصد (intent) من النوع BROWSEABLE
.
لا تٌطبّق اللائحة البيضاء على الإضافات، وإنما تُطبق على الروابط التشعبية واستدعاءات التابعwindow.open()
.
في الملف config.xml
، أضف الوسوم <allow-intent>
التالية:
<!-- السماح بفتح الروابط الموجهة إلى المواقع في المتصفح -->
<allow-intent href="http://*/*" />
<allow-intent href="https://*/*" />
<!-- في المتصفح example.com السماح بفتح الروابط الموجهة إلى -->
<allow-intent href="http://example.com/*" />
<!-- المحرف العام "*" مسموح باستخدامه لأجل البروتوكول، كبادئة للمضيف، أو كلاحقة على المسار -->
<allow-intent href="*://*.example.com/*" />
<!-- messaging app أن تُفتح في تطبيق المراسلة SMS السماح بروابط الرسائل -->
<allow-intent href="sms:*" />
<!-- dialer في جهاز tel: السماح بأن تُفتح روابط -->
<allow-intent href="tel:*" />
<!-- Allow geo: links to open maps -->
<!-- في الخرائط geo: السماح بأن تُفتح روابط -->
<allow-intent href="geo:*" />
<!-- السماح بالعناوين غير المعروفة بأن تفتح التطبيقات المثبتة
*لا يُنصح به* -->
<allow-intent href="*" />
اللائحة البيضاء لطلبيات الشبكة (Network Request Whitelist)
تتحكم هذه اللائحة في طلبيات (requests) الشبكة (الصور، كائنات XHRs، إلخ) المسموح بها (عن طريق خطافات كوردوفا الأصلية).
ملاحظة: نقترح عليك استخدام سياسة أمان المحتوى (انظر أدناه)، والتي هي أكثر أمانًا. فهذه اللائحة البيضاء موجّهة في الغالب للمواقع التي لا تدعم سياسة أمان المحتوى (CSP).
في الملف config.xml
، أضف الوسوم <access>
التالية:
<!-- google.com وغير ذلك إلى الموقع xhrs إتاحة الصور و -->
<access origin="http://google.com" />
<access origin="https://google.com" />
<!-- maps.google.com الدخلول إلى النطاق الفرعي -->
<access origin="http://maps.google.com" />
<!-- google.com الدخول إلى كافة النطاقات الفرعية للموقع -->
<access origin="http://*.google.com" />
<!-- إتاحة طلبيات المحتوى إلى المواقع -->
<access origin="content:///*" />
<!-- عدم تعطيل أي طلبية -->
<access origin="*" />
إذا لم يُضف أيُّ وسم <access>
إلى الملف config.xml
، فلن يُسمح إلا بالطلبيات الموجهة لعناوين file://
. إلا أنّ التطبيق الافتراضي لكوردوفا يتضمّن الوسم <access origin="*">
بشكل افتراضي.
ملاحظة: لا يمكن للائحة البيضاء حظر عمليات إعادة التوجيه من موقع بعيد (أي http أو https) مُدرجٍ في اللائحة البيضاء إلى موقع غير مدرج فيها. استخدم قواعد سياسة أمان المحتوى (CSP) للتقليل من عمليات إعادة التوجيه إلى المواقع غير المدرجة في اللائحة البيضاء في العوارض التي تدعم سياسة أمان المحتوى.
ملاحظات خاصة: تسمح منصة أندرويد أيضًا بالطلبيات المُوجّهة إلى الموقع https://ssl.gstatic.com/accessibility/javascript/android/ بشكل افتراضي، نظرًا لكون هذا الموقع ضروريًا لكي يشتغل تطبيق TalkBack بالشكل الصحيح.
سياسة أمن المحتوى (Content Security Policy)
تحدد سياسةُ أمن المحتوى طلبياتِ الشبكة (الصور، كائنات XHRs، إلخ) المسموح بها (عبر العارض مباشرة).
على منصتي أندرويد و iOS، لا يمكن للائحة البيضاء لطلبيات الشبكة (network request whitelist) (انظر أعلاه) تصفية جميع أنواع الطلبيات (على سبيل المثال، لا يتم حظر <video>
و WebSockets). لذلك، فبالإضافة إلى اللائحة البيضاء، يجب عليك استخدام وسم سياسة أمن المحتوى <meta>
في جميع صفحاتك.
على منصة أندرويد، بدأ دعم سياسةُ أمن المحتوى ضمن العارض النظامي (system webview) مع إصدار 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">