Inicio › Llevarlo a producción
Seguridad
Modelo de confianza, qué protege AngeLite por defecto y cómo usar trustHtml, trustUrl, CSP y Trusted Types.
El modelo de confianza#
Las plantillas son código tuyo; los datos que muestras no son de fiar. AngeLite está hecho para que un dato no se convierta en HTML, script o URL peligrosa por accidente.
| Situación | Qué hace AngeLite |
|---|---|
{{ valor }} | Siempre se inserta como texto. |
href, src, action… | Solo pasan http(s), mailto, tel, sms, ftp y rutas relativas; lo demás queda como unsafe:… y avisa en consola. |
[innerHTML] | Solo pinta HTML envuelto en trustHtml(); cualquier otro valor se inserta como texto. |
[onclick], [srcdoc], bindings sobre <script>, <base>, <link> | Error de compilación. |
| Expresiones | Nunca reciben window ni document, vengan de donde vengan. |
eval / new Function | No se usan: funciona con una CSP sin unsafe-eval y soporta Trusted Types. |
Cuando sí quieres HTML o un esquema propio#
import { signal, trustHtml, trustUrl } from '@duvanjamid/angelite';
html = signal(trustHtml(DOMPurify.sanitize(comentario))); // sanea antes: tú te haces responsable
link = signal(trustUrl('whatsapp://send?text=hola')); // esquema permitido a propósitotrustHtml no sanea
Solo marca el valor como de confianza. Si el HTML viene de un usuario, pásalo antes por un sanitizador como DOMPurify.
CSP y Trusted Types#
Content-Security-Policy: default-src 'self'; script-src 'self';
require-trusted-types-for 'script'; trusted-types angeliteCon la política angelite el navegador solo acepta HTML que haya pasado por trustHtml().
Defensa en profundidad, no un límite
El sandbox de expresiones reduce el daño, pero no es una frontera de seguridad. Nunca compiles plantillas que incluyan datos de usuario; en producción precompila. Más detalle en SECURITY.md.