DocsConvenciones y conceptos
Seguridad
Cómo Nexy mantiene pequeña su propia superficie de ataque, qué versiones requiere y cómo verificar un proyecto.
Versión pisos
Nexy depende de FastAPI, Starlette, Jinja2, Vite y React. Un piso es la versión más baja que permite Nexy; cada uno responde a un aviso publicado.
| Paquete | piso | ¿Por qué? |
|---|---|---|
starlette |
1.0.1 | CVE-2026-48710 (BadHost): un encabezado Host modificado cambia la ruta Starlette informa al middleware, lo que omite la autorización escrita en request.url.path. Catalogado como explotado por CISA. |
fastapi |
0.133.0 | la primera versión que acepta un Starlette fijo |
jinja2 |
3.1.6 | escape del sandbox a través del filtro attr (CVE-2025-27516) |
vite (proyectos estructurados) |
6.4.3 | server.fs.deny omitir rutas alternativas de Windows (CVE-2026-53571); la omisión de cadena de consulta anterior (CVE-2026-39364) afecta solo a Vite 7.1-7.3.1 y 8.0.0-8.0.4 |
react, react-dom |
19.2.5 | los avisos de 2026 React se refieren a los paquetes react-server-dom-*, que Nexy no utiliza; el piso mantiene la línea parchada |
Comprueba tus versiones resueltas:
uv pip list | grep -i -E "starlette|fastapi|jinja2"npm ls vite
Reglas que sigue Nexy
- Nunca confíes en el encabezado del Host para las rutas. Nexy lee
scope["path"], norequest.url.path, en su propio middleware (middleware de directorio). Haz lo mismo en el tuyo. - Escape de lo que llega a HTML. Los accesorios pasados a los componentes del cliente,
Linkatributos,Image,AudioyVideoatributos, anclajes de tabla de contenido yHTTPExceptiondetalles se escapan de HTML. Una plantilla.nexyno escapa por sí sola: escriba{{ value | e }}para cualquier valor que provenga de un visitante o de la base de datos, y nunca| safeen la entrada del usuario. - Los puntos finales de desarrollador son de bucle invertido y estrechos. El punto final de procesamiento de desarrollo (
/__nexy__/render) solo acepta archivos bajosrc/routes/con una extensión.tsxo.jsx, y solo se puede acceder a él a través del servidor de desarrollo, que rechaza encabezadosHostexternos. - Los detalles del error no se filtran. Una página de error que falla muestra solo el código de estado.
- Las respuestas de producción llevan encabezados seguros.
X-Content-Type-Options: nosniffyReferrer-Policy: strict-origin-when-cross-origin, a menos que su código establezca el suyo propio. El encabezadoServerno se envía. AgregaStrict-Transport-Securityy unContent-Security-Policyen tu proxy o un middleware: dependen de tu dominio. - Un bloqueo muestra una referencia, no el error. Consulte Páginas de error.
- No
evalnishell=Trueen el código Python de Nexy. Los programas externos se ejecutan con una lista de argumentos.
Ejecución de las auditorías
python scripts/audit_dependencies.py # Python dependencies against the locknpm audit # in a scaffolded projectuv run bandit -r nexy -c .bandit # static analysis of Nexy itself
El propio repositorio de Nexy ejecuta el primero y el tercero en sus comprobaciones. Un nuevo aviso en un piso de arriba se maneja elevando el piso en pyproject.toml o en el andamio package.json, luego regenerando la cerradura.
Implementación segura
- Establezca
useTrustedHosten sus dominios: rechaza encabezadosHostinesperados antes de cualquier ruta. - No exponga el servidor de desarrollo Vite:
nx devlo mantiene en bucle detrás del origen Nexy. - Establezca
useDocs = Falsesi el esquema de API no debe ser público.
Consulte Middleware y seguridad.
Fuentes
- CVE-2026-48710 (BadHost) en Starlette
- Vite aviso GHSA-fx2h-pf6j-xcff y GHSA-v2wj-q39q-566r
- Jinja2 CVE-2025-27516
- React paquetes de servidor CVE-2026-44907