Content Security Policy
O SDK da Kaleidr é executado na página do cliente. Isso significa que a Content Security Policy da página do cliente deve permitir os recursos carregados por cada produto. Esta página apresenta a configuração.
Produto por produto
Tile e Viewer (produtos iframe)
Tile e Viewer carregam o mapa real dentro de map-embed.kaleidr.com, sob a
CSP da Kaleidr. A página pai só precisa permitir o próprio iframe e
o loader do 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;
Você não precisa permitir hosts de imagens Mapbox / MapTiler / OSM / vendor na página pai quando incorpora apenas Tile ou Viewer — eles ficam dentro do iframe da Kaleidr.
Chat e Editor (attach dentro da página)
Chat e Editor montam o MapLibre no documento pai. A CSP da página pai deve permitir todos os hosts que o MapLibre e o SDK realmente carregam:
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' é obrigatório — o MapLibre compila WebAssembly em runtime
e falha sem isso. Se sua CSP proibir 'wasm-unsafe-eval', atualmente você não pode
montar Chat ou Editor dentro da página.
O que falha primeiro
| Sintoma | Diretiva provavelmente ausente |
|---|---|
| Loader do SDK retorna 404 ou é bloqueado | script-src https://cdn.kaleidr.com |
| Inicialização do MapLibre falha (Chat/Editor) | 'wasm-unsafe-eval' em script-src |
| Tiles aparecem em branco / cinza | connect-src e/ou img-src para o host do vendor |
| Iframe nunca renderiza (Tile / Viewer) | frame-src https://map-embed.kaleidr.com |
| Session exchange retorna 4xx no console | Não é CSP — consulte a origin allowlist em Auth & scopes |
Nonces e hashes
'unsafe-inline' está incluído em style-src acima porque o MapLibre gera
blocos <style> inline. Se sua CSP atualmente proíbe 'unsafe-inline', use um
nonce e emita novamente os estilos sob esse nonce — o SDK atualmente não
gera um nonce por carregamento; se precisar de um, abra uma issue em
kaleidr-sdk.
Implantação report-only
A forma segura de adotar esta política é:
- Configure o bloco acima como
Content-Security-Policy-Report-Onlycom umreport-urisob seu controle por uma semana. - Adicione os hosts que aparecerem nos relatórios de violação à diretiva correta.
- Promova o header para
Content-Security-Policyquando os relatórios estiverem limpos.