文档惯例和概念
安全性
Nexy 如何保持自己的攻击面较小、它需要哪些版本以及如何检查项目。
版本楼层
Nexy 取决于 FastAPI、Starlette、Jinja2、Vite 和 React。楼层是 Nexy 允许的最低版本;每个人都回答已发布的建议。
| 套餐 | 楼层 | 为什么 |
|---|---|---|
starlette |
1.0.1 | CVE-2026-48710 (BadHost):精心设计的 Host 标头更改了 Starlette 报告到中间件的路径,从而绕过了 request.url.path 上写入的授权。被 CISA 列为利用。 |
fastapi |
0.133.0 | 第一个接受固定 Starlette 的版本 |
jinja2 |
3.1.6 | 通过 attr 过滤器逃逸沙箱 (CVE-2025-27516) |
vite(脚手架项目) |
6.4.3 | server.fs.deny 绕过 Windows 备用路径 (CVE-2026-53571);早期的查询字符串绕过 (CVE-2026-39364) 仅影响 Vite 7.1-7.3.1 和 8.0.0-8.0.4 |
react,react-dom |
19.2.5 | 2026 React 公告涉及 react-server-dom-* 软件包,Nexy 不使用该软件包;地板保持线路修补 |
检查您已解决的版本:
uv pip list | grep -i -E "starlette|fastapi|jinja2"npm ls vite
规则 Nexy 遵循
- 切勿信任路径的 Host 标头。 Nexy 在其自己的中间件(目录中间件)中读取
scope["path"],而不是request.url.path。在你的身上做同样的事情。 - 对到达 HTML 的内容进行转义。 传递给客户端组件的属性、
Link属性、Image、Audio和Video属性、目录锚点和HTTPException详细信息都是 HTML 转义的。.nexy模板不会自行转义:为来自访问者或数据库的任何值写入{{ value | e }},而绝不在用户输入上写入| safe。 - 开发者端点是仅环回且狭窄的。 开发渲染端点(
/__nexy__/render)仅接受src/routes/下具有.tsx或.jsx扩展名的文件,并且只能通过开发服务器访问,而开发服务器拒绝外部Host标头。 - 错误详细信息不会泄漏。 本身失败的错误页面仅显示状态代码。
- 生产答案带有安全标头。
X-Content-Type-Options: nosniff和Referrer-Policy: strict-origin-when-cross-origin,除非您的代码设置了自己的标头。不发送Server标头。在您的代理或中间件中添加Strict-Transport-Security和Content-Security-Policy:它们取决于您的域。 - 崩溃显示引用,而不是错误。 请参阅错误页面。
- Nexy 的 Python 代码中没有
eval和shell=True。 外部程序使用参数列表运行。
运行审核
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
Nexy 自己的存储库在其检查中运行第一个和第三个。上一层的新建议是通过升高 pyproject.toml 或脚手架 package.json 中的地板,然后重新生成锁来处理的。
安全部署
- 将
useTrustedHost设置为您的域:它会拒绝任何路由之前的意外Host标头。 - 不要公开 Vite 开发服务器:
nx dev使其保持在 Nexy 源后面的环回状态。 - 如果 API 模式不应公开,则设置
useDocs = False。
请参阅中间件和安全性。
来源
- CVE-2026-48710(BadHost)位于 Starlette
- Vite 咨询 GHSA-fx2h-pf6j-xcff 和 GHSA-v2wj-q39q-566r
- Jinja2 CVE-2025-27516
- React 服务器软件包 CVE-2026-44907