netlify.toml ya envía X-Content-Type-Options, X-Frame-Options, Referrer-Policy y Permissions-Policy, pero no envía Content-Security-Policy. Lo verifiqué en producción el 25 de septiembre de 2026.
Propuesta
Empezar en modo Content-Security-Policy-Report-Only para no romper nada, y pasar a modo estricto cuando el preview funcione. Estos son los orígenes que usa hoy el sitio:
| Directiva |
Orígenes |
script-src |
'self', cdn.jsdelivr.net. Hay scripts en línea en registro.html, ponentes.html y convence-a-tu-jefe.html: moverlos a 2026/js/ o autorizarlos por hash |
style-src |
'self', fonts.googleapis.com, cdnjs.cloudflare.com. Hay bloques <style> en registro.html, ponentes.html, voluntariado/index.html y convence-a-tu-jefe.html |
font-src |
fonts.gstatic.com, cdnjs.cloudflare.com |
connect-src |
'self', el proyecto de Supabase (*.supabase.co) |
img-src |
'self', data: |
frame-src |
'none': los mapas de sedes.html son enlaces, no iframes |
frame-ancestors |
'self' |
Criterios de aceptación
netlify.tomlya envíaX-Content-Type-Options,X-Frame-Options,Referrer-PolicyyPermissions-Policy, pero no envíaContent-Security-Policy. Lo verifiqué en producción el 25 de septiembre de 2026.Propuesta
Empezar en modo
Content-Security-Policy-Report-Onlypara no romper nada, y pasar a modo estricto cuando el preview funcione. Estos son los orígenes que usa hoy el sitio:script-src'self',cdn.jsdelivr.net. Hay scripts en línea enregistro.html,ponentes.htmlyconvence-a-tu-jefe.html: moverlos a2026/js/o autorizarlos por hashstyle-src'self',fonts.googleapis.com,cdnjs.cloudflare.com. Hay bloques<style>enregistro.html,ponentes.html,voluntariado/index.htmlyconvence-a-tu-jefe.htmlfont-srcfonts.gstatic.com,cdnjs.cloudflare.comconnect-src'self', el proyecto de Supabase (*.supabase.co)img-src'self',data:frame-src'none': los mapas desedes.htmlson enlaces, no iframesframe-ancestors'self'Criterios de aceptación
netlify.toml.