Feedjoltdocs
DesarrolladoresWidget

Content Security Policy del widget

Las directivas exactas de Content Security Policy que necesita el widget de Feedjolt: script, connect, frame, img, style y font, ademas de un ejemplo de CSP estricta.

Si tu sitio tiene una Content Security Policy estricta, el widget necesita permisos explícitos. Sin ellos, el script del loader, el iframe y las peticiones de assets serán bloqueados.

Directivas mínimas

script-src  https://www.feedjolt.com
connect-src https://www.feedjolt.com
frame-src   https://www.feedjolt.com
img-src     https://cdn.feedjolt.com data: blob:
style-src   'unsafe-inline'
font-src    https://www.feedjolt.com data:

Si ya usas default-src 'self', las directivas de arriba son adiciones - no reemplazan a las existentes.

Notas por directiva

script-src

El loader del widget se descarga de feedjolt.com. Es un único script pequeño; el JS del iframe está dentro del iframe y usa su propia CSP.

Si requieres nonces para scripts inline (sin 'unsafe-inline'), el loader es externo - no hace falta nonce. No necesitas etiquetar el loader con un nonce.

connect-src

El loader hace algunos pings de telemetría (eventos de apertura/cierre para nuestro logging anti-abuso) a feedjolt.com. Las llamadas API del iframe ocurren dentro del iframe y usan su propia CSP, no la tuya.

frame-src

El iframe es <iframe src="https://www.feedjolt.com/widget?...">. Sin esto, el iframe se bloquea en la capa de framing y el widget nunca se abre.

img-src

Los logos del espacio, los adjuntos de posts y las capturas del changelog se sirven desde cdn.feedjolt.com. data: y blob: cubren los iconos SVG y las imágenes subidas durante la previsualización.

style-src

El script del loader inyecta un pequeño bloque <style> para posicionar el botón. Si no puedes permitir 'unsafe-inline', hay un fallback - oculta nuestro botón con tu propio CSS y llama a window.feedjolt.open() desde tu botón personalizado.

font-src

El widget usa Geist como fuente por defecto. Dentro del iframe, las fuentes vienen de feedjolt.com.

Ejemplo de CSP estricta

Una CSP de producción completa que permite el widget:

default-src 'self';
script-src 'self' 'nonce-{NONCE}' https://www.feedjolt.com;
connect-src 'self' https://www.feedjolt.com https://tu-api.com;
frame-src https://www.feedjolt.com https://challenges.cloudflare.com;
img-src 'self' data: blob: https://cdn.feedjolt.com https://tu-cdn.com;
font-src 'self' data: https://www.feedjolt.com;
style-src 'self' 'unsafe-inline';
form-action 'self';
base-uri 'self';
object-src 'none';
frame-ancestors 'none';
upgrade-insecure-requests;

frame-ancestors 'none' está bien - controla quién te puede embeber a ti, no qué puedes embeber .

CSP en modo report-only

Recomendamos encarecidamente correr CSP en report-only mientras integras, luego promoverlo a enforce tras una semana limpia de reportes.

Content-Security-Policy-Report-Only: script-src ...; report-uri https://tu-csp-collector;

Si nuestro dominio aparece en un reporte de violación, has encontrado una directiva que te falta. Añádela; vuelve a probar.

Subresource Integrity (SRI)

Actualmente no proporcionamos hashes SRI estables para widget-loader.js porque el loader se actualiza continuamente. Si necesitas SRI por cumplimiento, recomendamos alojar una copia fijada del loader en tu propio CDN y actualizarla en un calendario controlado.

Esto es un compromiso: un loader fijado tiene SRI estricto; te asumes la responsabilidad de tirar de actualizaciones. Compartiremos builds firmados bajo solicitud.

Trusted Types

Si usas la CSP Trusted Types, el loader del widget no asigna directamente a innerHTML; el contenido del iframe se carga vía atributo src estándar. No deberías necesitar una política Trusted Types para el widget.

Errores comunes

  • script-src 'self' solamente. El loader está en feedjolt.com, no en 'self'. Añade el origen explícito.
  • Olvidar frame-src. Sin esto, el iframe nunca carga. El botón funciona pero hacer clic no hace nada.
  • img-src 'self' solamente. Los logos y las imágenes subidas vienen de cdn.feedjolt.com. Aparecerán como iconos rotos.
  • Activar CSP sin probar. Siempre va primero report-only.

CORS / cross-origin

El widget hace peticiones cross-origin desde tu página a feedjolt.com. Manejamos CORS en el servidor; tú no tienes que configurar nada. Si ves un error de CORS en la consola, suele ser CSP mal reportada - revisa tu CSP primero.

On this page