إنتقل إلى المحتوى الرئيسي

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

إذا أرسل موقعك ترويسة Content-Security-Policy، فسيحظر المتصفح كل ما لا تسمح به السياسة، بما فيه سكربتات Kaleidr وإطاراتها وطلباتها. تعرض هذه الصفحة ما يجب السماح به لكل منتج. إذا لم يرسل موقعك هذه الترويسة فلا تحتاج إلى هذه الصفحة.

تعتمد الأذونات المطلوبة على موضع تشغيل المنتج:

المنتجمكان التشغيلما يجب أن تسمح به السياسة
Viewerداخل iframe يستضيفه Kaleidrسكربت المحمّل والإطار.
Tileداخل iframe يستضيفه Kaleidrالمحمّل وطلب الجلسة والإطار.
Chatداخل صفحتكالمحمّل وطلبات API والأنماط المضافة والخطوط والصور المضمنة.
Editorداخل صفحتك وله خريطته الخاصةكل ما سبق، إلى جانب مضيف خريطة الأساس وعمال الخريطة وصورها.

بالنسبة إلى المنتجين داخل iframe، تخضع الخريطة وكل الموارد التي تحمّلها لسياسة Kaleidr داخل الإطار، لا لسياسة صفحتك. لهذا تكون القوائم المطلوبة قصيرة.

المضيفون​

المضيفالموارد التي يقدّمهاتستخدمه
https://cdn.kaleidr.comkaleidr.js وحزم المنتجات التي يحمّلها (chat.js وviewer.js وeditor.js وtile.js).جميع المنتجات عند استخدام SDK.
https://api.kaleidr.comتبادل الجلسة والطلبات التي ترسلها Chat أثناء الإجابة.Chat وEditor وTile.
https://map-embed.kaleidr.comالصفحة المعروضة داخل iframe لمنتجي Viewer وTile.Viewer وTile.
https://tile.kaleidr.comخريطة الأساس في Editor: النمط ومربعات الخريطة والرموز والخطوط.Editor.

لا تحتاج إلى السماح بمضيفي Mapbox أوMapTiler أوOpenStreetMap لأي منتج Kaleidr. أدرجتها نسخ سابقة من الصفحة ويمكن حذفها. إذا كانت صفحتك تشغّل خريطة خاصة بك فيجب أن تسمح بمضيفي تلك الخريطة أيضًا.

Viewer​

باستخدام عنصر SDK أو Kaleidr.mount:

script-src https://cdn.kaleidr.com;
frame-src https://map-embed.kaleidr.com;

عند استخدام مقتطف iframe العادي من Studio لا يوجد سكربت:

frame-src https://map-embed.kaleidr.com;

لا يحتاج Viewer إلى إدخال connect-src لأن Viewer المثبت دون مفتاح لا يرسل طلبات من صفحتك.

Tile​

script-src https://cdn.kaleidr.com;
connect-src https://api.kaleidr.com;
frame-src https://map-embed.kaleidr.com;

يُستخدم connect-src لتبادل الجلسة الذي تجريه SDK بمفتاحك القابل للنشر قبل إنشاء iframe.

Chat​

script-src https://cdn.kaleidr.com;
connect-src https://api.kaleidr.com;
style-src 'unsafe-inline';
font-src data:;
img-src data: https:;
التوجيهالسبب
script-src https://cdn.kaleidr.comالمحمّل وchat.js.
connect-src https://api.kaleidr.comتبادل الجلسة وكل سؤال وإجابة.
style-src 'unsafe-inline'تضيف Chat عنصر <style> إلى رأس المستند دون nonce.
font-src data:الخطوط مضمنة في حزمة Chat كعناوين data:.
img-src data:أيقونات Chat مضمنة كعناوين data:.
img-src https:تعرض بطاقات الأماكن صورًا من مضيفين يختلفون باختلاف المكان، ولا يمكن حصرهم هنا. إذا ضيّقت img-src فلن تُحمّل الصور من المضيفين غير المسموحين.
img-src https: (أيقونات المواقع)تعرض روابط الإجابات ومواقع الأماكن أيقونات المواقع. تأتي من خدمة favicon التابعة لـGoogle في https://www.google.com مع إعادة توجيه إلى https://t0.gstatic.com حتى https://t3.gstatic.com. إذا ضيّقت img-src اسمح بـhttps://www.google.com وhttps://*.gstatic.com، وإلا تغيب الأيقونات وتظل الروابط تعمل.

لا تحتوي حزمة Chat على مكتبة خرائط ولا تحتاج إلى 'wasm-unsafe-eval'. فهي ترسم على الخريطة الموجودة في صفحتك، لذا أبقِ الأذونات التي تتطلبها مكتبتك: مضيف السكربتات ومضيفي المربعات والأنماط في connect-src وimg-src وworker-src blob: لمكتبتي Mapbox GL JS وMapLibre GL JS.

إذا كانت Chat تتحكم في عنصر Viewer أوTile من Kaleidr بدلًا من خريطتك، فأضف توجيهات ذلك المنتج بما فيها frame-src https://map-embed.kaleidr.com.

Editor​

script-src 'self' https://cdn.kaleidr.com;
style-src 'self' 'unsafe-inline';
connect-src 'self' https://api.kaleidr.com https://tile.kaleidr.com;
img-src 'self' data: blob: https://tile.kaleidr.com;
worker-src blob:;
font-src 'self' data:;
التوجيهالسبب
script-src https://cdn.kaleidr.comالمحمّل وeditor.js.
style-src 'unsafe-inline'يضيف Editor أوراق أنماطه إلى المستند عبر JavaScript دون nonce.
connect-src https://api.kaleidr.comتبادل الجلسة.
connect-src https://tile.kaleidr.comنمط خريطة الأساس ومربعاتها ورموزها وخطوط تسمياتها التي يجلبها المحرر من صفحتك.
img-src data: blob: https://tile.kaleidr.comصور الخريطة وأيقوناتها، إذ ينشئ المحرر الصور من عناوين blob: وdata:.
worker-src blob:يشغّل المحرر عمال الخريطة من عناوين blob:.
font-src data:خطوط واجهة Editor مضمنة كعناوين data:.

لا يُدرج 'wasm-unsafe-eval' ضمن القائمة. أضفه إلى script-src فقط إذا أبلغت وحدة التحكم بأن السياسة حظرت ترجمة WebAssembly في editor.js، المستخدمة لفك ترميز النماذج ثلاثية الأبعاد.

إذا مررت عنوان نمط كاملًا عبر styleId، فاسمح أيضًا بمضيفي ذلك النمط في connect-src وimg-src.

منتجات متعددة في صفحة واحدة​

اجمع القوائم. تحتاج الصفحة التي تعرض خريطة Tile وتتحكم فيها لوحة Chat إلى:

script-src https://cdn.kaleidr.com;
connect-src https://api.kaleidr.com;
frame-src https://map-embed.kaleidr.com;
style-src 'unsafe-inline';
font-src data:;
img-src data: https:;

سياسة كاملة​

توضح الكتل السابقة ما يضيفه Kaleidr. ويجب أن تسمح السياسة الفعلية بموارد موقعك أيضًا. هذه ترويسة كاملة لموقع يقدم جميع الموارد الأخرى من مصدره ويضمّن Viewer وTile:

Content-Security-Policy: default-src 'self'; script-src 'self' https://cdn.kaleidr.com; connect-src 'self' https://api.kaleidr.com; frame-src https://map-embed.kaleidr.com; style-src 'self' 'unsafe-inline'

ورد style-src 'unsafe-inline' في هذا المثال لسبب لا يتعلق بشيفرة Kaleidr: تضبط مقتطفات الوثائق ارتفاع العنصر بسمة داخلية style="display:block; height:480px"، وتتجاهل السياسة التي لا تحتوي 'unsafe-inline' سمات النمط الداخلية. إذا أردت منعها فاضبط الحجم من ورقة أنماطك:

kaleidr-map { display: block; height: 480px; }

لا يتأثر الحجم الذي تعطيه SDK لإطار iframe، لأنه يحدد عبر سكربت لا تحظره سياسة الأنماط. ولا يتأثر أيضًا الإعداد الافتراضي display:block للعنصر لأنه لا يأتي من وسم <style> أو سمة style، وبالتالي لا يحتاج إلى 'unsafe-inline'.

قيم nonce والبصمات وstrict-dynamic​

  • السكربتات. يضيف المحمّل كل حزمة كعنصر <script src>. يسمح بها script-src القائم على المضيف. إذا استعملت السياسة nonce مع 'strict-dynamic' فضَع nonce على وسم المحمّل؛ تصبح السكربتات التي يضيفها موثوقة عبر 'strict-dynamic' دون الحاجة إلى إدخال المضيف.
  • الأنماط. لا يمكن تمرير nonce إلى SDK للأنماط التي يضيفها Chat وEditor، ويتغير محتواها مع الإصدارات فلا يمكن تثبيت بصمتها أيضًا. يحتاج المنتجان إلى 'unsafe-inline' ضمن style-src. ولا يضيف Viewer أوTile أنماطًا إلى صفحتك.
  • السلامة. لا تضف سمة integrity إلى وسم المحمّل؛ يتحدث الملف في موقعه نفسه. راجع إصدارات شبكة توزيع المحتوى.

شكل الموارد المحظورة​

يبلّغ المتصفح عن كل حظر في وحدة التحكم مع التوجيه الذي سببه. قارنه بالجدول التالي.

العرضالتوجيه الظاهرما يجب إضافته
لا يُثبّت شيء. Kaleidr is not defined.script-srchttps://cdn.kaleidr.com ضمن script-src.
يبقى العنصر فارغًا. في وحدة التحكم: [kaleidr:<product>] [kaleidr] failed to load …/embed/v1/<product>.jsscript-srcالمضيف نفسه. سُمح للمحمّل، مثلًا ببصمة، لكن حزمته لم تُسمح.
يظهر Viewer أوTile مربعًا فارغًا.frame-src (أو child-src أو default-src)https://map-embed.kaleidr.com ضمن frame-src.
لا يبدأ Tile أوChat أوEditor، وحُظر طلب sessions.connect-srchttps://api.kaleidr.com ضمن connect-src.
تظهر لوحة المحادثة دون تنسيق.style-src'unsafe-inline' ضمن style-src.
تختفي أيقونات Chat أوخطوطها.img-src وfont-srcdata: في كليهما.
تختفي صور الأماكن أوأيقونات الروابط.img-srchttps: ضمن img-src أوالمضيفون المذكورون في وحدة التحكم.
تظهر لوحات Editor لكن الخريطة فارغة.connect-src أوworker-src أوimg-srchttps://tile.kaleidr.com في connect-src وimg-src، وblob: في worker-src وimg-src.
يظهر المحرر دون تنسيق.style-src'unsafe-inline' ضمن style-src.
يتجاهل العنصر الارتفاع في سمة style.style-srcلا شيء؛ اضبط الحجم في ورقة أنماط.

ليس كل عطل مشكلة سياسة. إذا أُرسل طلب sessions ثم عاد بحالة 401 أو403 أو429، فالسياسة سمحت به لكن API رفضته. راجع الأخطاء وCORS والمصادر المسموحة.

الإطلاق بوضع التقارير فقط​

لإضافة Kaleidr إلى سياسة صارمة دون تعطيل صفحة الإنتاج:

  1. أرسل السياسة المقترحة على هيئة Content-Security-Policy-Report-Only إلى جانب الحالية، مع نقطة تجميع تقارير تملكها.
  2. جرّب التضمين: افتح الصفحة وحرّك الخريطة واطرح في Chat أسئلة تعيد أماكن بصور.
  3. أضف مصادر الموارد التي تظهر في التقارير إلى التوجيهات المذكورة فيها. صور الأماكن غالبًا ما تتطلب مضيفين جدد.
  4. عندما لا تعود التقارير تظهر أي مخالفة، انقل السياسة إلى Content-Security-Policy.

ما لا تحتاج إليه​

  • مضيفو Mapbox أوMapTiler أوOpenStreetMap لأي منتج Kaleidr.
  • 'unsafe-inline' ضمن script-src؛ يضيف المحمّل حزم المنتجات كعناصر <script src> ولا يستخدم سكربتات داخلية.
  • frame-ancestors؛ يتحكم في الجهات التي يمكنها وضع صفحتك في إطار، وليس الأطر التي تستطيع صفحتك تضمينها.
  • أي إدخالات للموارد داخل إطار Viewer أوTile.

صفحات ذات صلة​