ДокументацияСоглашения и концепции
Безопасность
Как 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 | рекомендации React 2026 года касаются пакетов 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. - Установите
useDocs = False, если схема API не должна быть общедоступной.
См. Промежуточное ПО и безопасность.
Источники
- CVE-2026-48710 (BadHost) в Starlette
- Vite рекомендации GHSA-fx2h-pf6j-xcff и GHSA-v2wj-q39q-566r
- Jinja2 CVE-2025-27516
- React серверные пакеты CVE-2026-44907