الفرق بين المراجعتين لصفحة: «Cordova/cordova plugin whitelist»
لا ملخص تعديل |
جميل-بيلوني (نقاش | مساهمات) ط تدقيق |
||
سطر 2: | سطر 2: | ||
[[تصنيف: Cordova]] | [[تصنيف: Cordova]] | ||
[[تصنيف: Plugin]] | [[تصنيف: Plugin]] | ||
توفر هذه الإضافة (cordova-plugin-whitelist) اللوائح البيضاء التي تحدد كيفية التصفح عبر واجهات وصفحات التطبيق في كورودوفا 4.0. | |||
== التثبيت == | == التثبيت == | ||
سطر 10: | سطر 10: | ||
== المنصات المدعومة == | == المنصات المدعومة == | ||
* أندرويد 4.0.0 أو ما | * أندرويد 4.0.0 أو ما بعده. | ||
== لوائح التصفح البيضاء (Navigation Whitelists) == | == لوائح التصفح البيضاء (Navigation Whitelists) == | ||
تتحكم هذه اللائحة في العناوين التي يمكن لل[[Cordova/webviews|عارض]] أن يتصفّحها. وتنطبق على تصفح المستوى الأعلى (top-level) من المواقع فقط. | تتحكم هذه اللائحة في العناوين التي يمكن لل[[Cordova/webviews|عارض]] أن يتصفّحها ويعرضها. وتنطبق على تصفح المستوى الأعلى (top-level) من المواقع فقط. | ||
'''ملاحظات خاصة''': على منصة أندرويد، تنطبق اللائحة أيضًا على الإطارات الذكية <code>iframe</code> الخاصة | '''ملاحظات خاصة''': على منصة أندرويد، تنطبق اللائحة أيضًا على الإطارات الذكية <code>iframe</code> الخاصة بالبروتوكولات من غير النوع http (non-http schemes). | ||
افتراضيًا، لا يُسمح سوى بتصفح العناوين <code>file://</code> فقط. للسماح بالعناوين الأخرى، عليك إضافة الوسوم <code><allow-navigation></code> إلى الملف <code>[[Cordova/config ref|config.xml]]</code>: | افتراضيًا، لا يُسمح سوى بتصفح العناوين <code>file://</code> فقط. للسماح بالعناوين الأخرى، عليك إضافة الوسوم <code><allow-navigation></code> إلى الملف <code>[[Cordova/config ref|config.xml]]</code>: | ||
سطر 33: | سطر 33: | ||
<allow-navigation href="data:*" /></syntaxhighlight> | <allow-navigation href="data:*" /></syntaxhighlight> | ||
== اللائحة البيضاء | == اللائحة البيضاء المستهدفة (Intent Whitelist) == | ||
تتحكم هذه اللائحة في العناوين التي | تتحكم هذه اللائحة في العناوين التي يُسمَح للتطبيق بمطالبة النظام بفتحها. افتراضيًا، لا يُسمح بأي عناوين خارجية. | ||
على منصة أندرويد، يكافئ ذلك إرسال مقصد (intent) من النوع <code>BROWSEABLE</code>. | على منصة أندرويد، يكافئ ذلك إرسال مقصد (intent) من النوع <code>BROWSEABLE</code>. | ||
لا تٌطبّق اللائحة البيضاء على الإضافات، وإنما تُطبق على الروابط التشعبية واستدعاءات التابع<code>window.open()</code>. | لا تٌطبّق اللائحة البيضاء على الإضافات، وإنما تُطبق على الروابط التشعبية واستدعاءات التابع <code>window.open()</code>. | ||
في الملف <code>[[Cordova/config ref|config.xml]]</code>، أضف الوسوم <code><allow-intent></code> التالية: | في الملف <code>[[Cordova/config ref|config.xml]]</code>، أضف الوسوم <code><allow-intent></code> التالية: | ||
سطر 60: | سطر 60: | ||
<allow-intent href="*" /></syntaxhighlight> | <allow-intent href="*" /></syntaxhighlight> | ||
== اللائحة البيضاء لطلبيات الشبكة (Network Request Whitelist) == | |||
تحدد هذه اللائحةُ طلبيات (requests) الشبكة (الصور، | تحدد هذه اللائحةُ طلبيات (requests) الشبكة (مثل الصور، وكائنات XHRs، ...إلخ) المسموح بها (عن طريق [[Cordova/hooks|خطافات]] كوردوفا الأصلية). | ||
'''ملاحظة''': نقترح عليك استخدام سياسة أمان المحتوى (انظر أدناه)، والتي هي أكثر أمانًا. فهذه اللائحة البيضاء موجّهة في الغالب للمواقع التي لا تدعم سياسة أمان المحتوى (CSP). | '''ملاحظة''': نقترح عليك استخدام سياسة أمان المحتوى (انظر أدناه)، والتي هي أكثر أمانًا. فهذه اللائحة البيضاء موجّهة في الغالب للمواقع التي لا تدعم سياسة أمان المحتوى (CSP). | ||
سطر 81: | سطر 81: | ||
إذا لم يُضف أيُّ وسم <code><access></code> إلى الملف <code>[[Cordova/config ref|config.xml]]</code>، فلن يُسمح إلا بالطلبيات الموجهة لعناوين <code>file://</code>. إلا أنّ التطبيق الافتراضي لكوردوفا يتضمّن الوسم <code><access origin="*"></code> بشكل افتراضي. | إذا لم يُضف أيُّ وسم <code><access></code> إلى الملف <code>[[Cordova/config ref|config.xml]]</code>، فلن يُسمح إلا بالطلبيات الموجهة لعناوين <code>file://</code>. إلا أنّ التطبيق الافتراضي لكوردوفا يتضمّن الوسم <code><access origin="*"></code> بشكل افتراضي. | ||
'''ملاحظة''': لا يمكن للائحة البيضاء حظر عمليات إعادة التوجيه من موقع بعيد (أي http أو https) مُدرجٍ في اللائحة البيضاء إلى موقع غير مدرج فيها. استخدم قواعد سياسة أمان المحتوى (CSP) للتقليل من عمليات إعادة التوجيه إلى المواقع غير المدرجة في اللائحة البيضاء في [[Cordova/webviews| | '''ملاحظة''': لا يمكن للائحة البيضاء حظر عمليات إعادة التوجيه من موقع بعيد (أي http أو https) مُدرجٍ في اللائحة البيضاء إلى موقع غير مدرج فيها. استخدم قواعد سياسة أمان المحتوى (CSP) للتقليل من عمليات إعادة التوجيه إلى المواقع غير المدرجة في اللائحة البيضاء في [[Cordova/webviews|العارض]] الذي يدعم سياسة أمان المحتوى. | ||
'''ملاحظات خاصة''': تسمح منصة أندرويد أيضًا بالطلبيات المُوجّهة إلى الموقع https://ssl.gstatic.com/accessibility/javascript/android/ بشكل افتراضي، نظرًا لكون هذا الموقع ضروريًا | '''ملاحظات خاصة''': تسمح منصة أندرويد أيضًا بالطلبيات المُوجّهة إلى الموقع https://ssl.gstatic.com/accessibility/javascript/android/ بشكل افتراضي، نظرًا لكون هذا الموقع ضروريًا لعمل تطبيق TalkBack بالشكل الصحيح. | ||
=== سياسة أمن المحتوى (Content Security Policy) === | === سياسة أمن المحتوى (Content Security Policy) === | ||
تحدد سياسةُ أمن المحتوى طلبياتِ الشبكة (الصور، | تحدد سياسةُ أمن المحتوى طلبياتِ الشبكة (الصور، وكائنات XHRs، ...إلخ) المسموح بها (عبر [[Cordova/webviews|العارض]] مباشرةً). | ||
في منصتي أندرويد و 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=" | <syntaxhighlight lang="html"><!-- :تصريحات افتراضية مهمة | ||
* gap: وهو مطلوب في ،UIWebView عنداستخدام iOS ليس مطلوبا إلا في منصة | * gap: وهو مطلوب في ،UIWebView عنداستخدام iOS ليس مطلوبا إلا في منصة | ||
ملفات جافاسكريبت الأصلية للتواصل | ملفات جافاسكريبت الأصلية للتواصل | ||
سطر 116: | سطر 116: | ||
<meta http-equiv="Content-Security-Policy" content="default-src 'self'; frame-src 'self' https://cordova.apache.org"></syntaxhighlight> | <meta http-equiv="Content-Security-Policy" content="default-src 'self'; frame-src 'self' https://cordova.apache.org"></syntaxhighlight> | ||
== انظر | == انظر أيضًا == | ||
* | * إضافة [[Cordova/cordova plugin file|الملفات]] | ||
* [[Cordova/whitelist|اللوائح البيضاء]] | |||
* [[Cordova/security|إدارة الأمن | * [[Cordova/security|إدارة الأمن]] | ||
* [[Cordova/privacy|إدارة الخصوصية | * [[Cordova/privacy|إدارة الخصوصية]] | ||
* [[Cordova/plugins|دليل تطوير الإضافات في كوردوفا]] | * [[Cordova/plugins|دليل تطوير الإضافات في كوردوفا]] | ||
==مصادر== | ==مصادر== | ||
*[https://cordova.apache.org/docs/en/latest/reference/cordova-plugin-whitelist/index.html صفحة cordova-plugin-whitelist في توثيق كوردوفا الرسمي.] | *[https://cordova.apache.org/docs/en/latest/reference/cordova-plugin-whitelist/index.html صفحة cordova-plugin-whitelist في توثيق كوردوفا الرسمي.] |
مراجعة 12:56، 24 ديسمبر 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
:
<!-- :تصريحات افتراضية مهمة
* gap: وهو مطلوب في ،UIWebView عنداستخدام iOS ليس مطلوبا إلا في منصة
ملفات جافاسكريبت الأصلية للتواصل
* مطلوب فقط في منصة أندرويد، وهو ضروري لكي يعمل https://ssl.gstatic.com
* بشكل صحيح TalkBack التطبيق
* :لتغيير هذا ،XSS والنصوص البرمجية المُضمّنة لسد ثغرات eval() عطّل الدالة
* default-src إلى 'unsafe-inline' أتح ملفات جافاسكريبت المضمّنة: أضف
* default-src إلى 'unsafe-inline' أضف :eval() أتح الدالة
-->
<meta http-equiv="Content-Security-Policy" content="default-src 'self' data: gap: https://ssl.gstatic.com; style-src 'self' 'unsafe-inline'; media-src *">
<!-- foo.com أتِح كل شيء يأتي من نفس المصدر ومن الموقع -->
<meta http-equiv="Content-Security-Policy" content="default-src 'self' foo.com">
<!-- وغير ذلك CSS, AJAX, object, frame, media تسمح هذه السياسة بكل شي،مثل
: باستثناء ما يلي
* من نفس المصدر والتنسيقات المُضمّنة CSS ملفات
* eval() النصوص البرمجية من نفس المصدر والتنسيقات المُضمّنة والدالة
-->
<meta http-equiv="Content-Security-Policy" content="default-src *; style-src 'self' 'unsafe-inline'; script-src 'self' 'unsafe-inline' 'unsafe-eval'">
<!-- من نفس النطاق HTTPS بدل XHRs السماح بالبروتوكول-->
<meta http-equiv="Content-Security-Policy" content="default-src 'self' https:">
<!-- https://cordova.apache.org/ إتاحة الإطارات الذكية للموقع -->
<meta http-equiv="Content-Security-Policy" content="default-src 'self'; frame-src 'self' https://cordova.apache.org">
انظر أيضًا
- إضافة الملفات
- اللوائح البيضاء