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

Content Security Policy

يعمل SDK الخاص بـ Kaleidr داخل صفحة العميل. وهذا يعني أن Content Security Policy لصفحة العميل يجب أن تسمح بالموارد التي يقوم كل منتج بتحميلها. هذه الصفحة هي الوصفة.

حسب كل منتج

Tile وViewer (منتجات iframe)

يقوم Tile وViewer بتحميل الخريطة الفعلية داخل map-embed.kaleidr.com، تحت CSP الخاص بـ Kaleidr. ولا تحتاج الصفحة الأصلية إلا إلى السماح بالـ iframe نفسه و loader الخاص بـ SDK:

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

لا تحتاج إلى السماح بمضيفي صور Mapbox / MapTiler / OSM / vendor في الصفحة الأصلية عندما تضمّن Tile أو Viewer فقط — فهذه تعمل داخل iframe الخاص بـ Kaleidr.

Chat وEditor (attach داخل الصفحة)

يقوم Chat وEditor بتركيب MapLibre في المستند الأصل. ويجب أن يسمح CSP الخاص بالصفحة الأصلية بكل host يقوم MapLibre وSDK بتحميله فعليًا:

default-src 'self';
script-src 'self' 'wasm-unsafe-eval' https://cdn.kaleidr.com;
style-src 'self' 'unsafe-inline' https://cdn.kaleidr.com;
connect-src 'self'
https://api.kaleidr.com
https://api.mapbox.com https://events.mapbox.com
https://api.maptiler.com
https://*.tiles.mapbox.com;
img-src 'self' data: blob:
https://api.mapbox.com https://*.tiles.mapbox.com
https://api.maptiler.com
https://*.tile.openstreetmap.org;
worker-src 'self' blob:;
font-src 'self' data:;

'wasm-unsafe-eval' مطلوب — يقوم MapLibre بترجمة WebAssembly وقت التشغيل ويفشل بدونه. إذا كان CSP لديك يمنع 'wasm-unsafe-eval' فلن تتمكن حاليًا من تركيب Chat أو Editor داخل الصفحة.

ما الذي يتعطل أولًا

العَرَضالتوجيه المحتمل المفقود
loader الخاص بـ SDK يعيد 404 أو يتم حظرهscript-src https://cdn.kaleidr.com
فشل تهيئة MapLibre (Chat/Editor)'wasm-unsafe-eval' في script-src
البلاطات تظهر فارغة / رماديةconnect-src و/أو img-src لمضيف vendor
iframe لا يرسم أبدًا (Tile / Viewer)frame-src https://map-embed.kaleidr.com
Session exchange يعيد 4xx في consoleليس CSP — راجع Auth & scopes وقائمة origin allowlist

Nonces وhashes

تم تضمين 'unsafe-inline' في style-src أعلاه لأن MapLibre يصدر كتل <style> مضمنة. إذا كان CSP لديك يمنع 'unsafe-inline' حاليًا، فاستخدم nonce وأعد إصدار الأنماط باستخدام ذلك nonce — لا يقوم SDK حاليًا بإصدار nonce لكل load؛ وإذا كنت تحتاج إلى ذلك، افتح issue على kaleidr-sdk.

طرح report-only

الطريقة الآمنة لاعتماد هذه السياسة هي:

  1. اضبط الكتلة أعلاه كـ Content-Security-Policy-Report-Only مع report-uri تملكه لمدة أسبوع.
  2. أضف hosts التي تظهر في تقارير الانتهاكات إلى التوجيه الصحيح.
  3. قم بترقية header إلى Content-Security-Policy بعد أن تصبح التقارير هادئة.