Gracias por ayudar a mantener segura esta aplicación.
No abras un issue público para problemas de seguridad. Usa el reporte privado de GitHub:
- Entra en https://github.com/jaervic/budgetify/security/advisories/new
- Describe el problema, cómo reproducirlo y su impacto.
Recibirás respuesta lo antes posible. Una vez corregido, se publicará el aviso.
Esta aplicación no tiene backend, ni cuentas, ni sesiones, ni servidores. Todo el cálculo y el almacenamiento ocurren en el navegador de cada persona:
- Los datos (borrador, catálogo, datos de la clínica) se guardan en el
localStoragedel propio navegador. No se envían a ningún servidor. - La única conexión externa es un
GETa la API pública de la tasa del BCV (https://ve.dolarapi.com), que no lleva datos del usuario. - No hay analítica, rastreadores ni cookies de terceros.
Por eso, las vulnerabilidades relevantes aquí son:
- XSS (que un script inyectado pudiera leer el
localStorage). - CSRF/clickjacking (mitigado con CSP
frame-ancestorsyX-Frame-Options). - Dependencias comprometidas o desactualizadas.
- Content-Security-Policy estricta sin
unsafe-inlineniunsafe-evalen scripts (ververcel.json). Solo se permite WebAssembly ('wasm-unsafe-eval'), que necesita la librería que arma el PDF, ydata:enconnect-srcporque esa misma librería carga su módulo desde una URL de datos (inerte: no puede salir a la red). - Cabeceras
HSTS,X-Content-Type-Options,Referrer-Policy,X-Frame-Options,Permissions-Policy,Cross-Origin-Opener-PolicyyCross-Origin-Resource-Policy. - Validación con Zod de todo archivo importado, con límites de tamaño y longitud, y
las imágenes solo se aceptan como
data:image/(png|jpeg|webp);base64,…. - Sin
eval, sinnew Functiony sindangerouslySetInnerHTML. npm audit --audit-level=highen el CI y actualizaciones automáticas con Dependabot.
Como los datos viven en el navegador, en una computadora compartida otra persona que use el mismo perfil del navegador podría ver el borrador. En ese caso, usa el botón Limpiar al terminar (o abre la app en una ventana de incógnito).