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 tú.
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á enfeedjolt.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 decdn.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.
Personalización del widget
Qué puedes personalizar en el widget de Feedjolt: texto, posición y color del lanzador, más atributos de tema y tablero por defecto en la etiqueta embed.
Webhooks para desarrolladores
Referencia tecnica de los webhooks de Feedjolt: que entregamos, las cabeceras y el tiempo limite, verificar firmas, ser idempotente y gestionar fallos de entrega.
