Безопасность

Как NodeWise Studio бережёт ваши ключи и ваш компьютер и как сообщить об уязвимости.

Ключи и токены

Ключ модели или токен доступа к серверу может храниться в одном из трёх мест. «Настройки ▸ Приватность ▸ Где хранятся ключи» показывает, где каждый из них сейчас.

  • В хранилище паролей системы (GNOME Keyring или KWallet в Linux), зашифрованным вашей системой. Приложение сначала проверяет, что хранилище действительно шифрует; если нет, это место не предлагается.
  • В памяти до закрытия приложения. На диск ничего не пишется.
  • В файле в папке приложения, без шифрования, только если вы сами это выберете там, где хранилища паролей нет. Файл может читать только ваш пользователь.

Где бы ни хранился ключ:

  • Ключ уходит только на тот адрес, для которого его вставили. Смените адрес, и ключ останется, пока вы не вставите его снова.
  • Облачный ключ уходит только по https.
  • Ключи и токены никогда не попадают в журнал, журнал общения с моделью, файлы проектов, workflow, скопированные сведения для диагностики и текст для модели. Каждая строка журнала проходит фильтр, который их скрывает.
  • «Настройки ▸ Приватность ▸ Забыть все ключи и токены» удаляет каждый ключ, токен и вход через браузер: из памяти, из хранилища паролей и из папки приложения.

Если хранилище паролей не открывается, см. Решение проблем.

Окно

  • Окно работает в песочнице Chromium, а его страница отделена от собственного кода приложения. С остальным приложением оно говорит только через постоянный список проверяемых каналов.
  • Оно не может перейти на другую страницу или открыть новые окна; ссылки открываются в системном браузере.
  • Оно ничего не загружает из интернета: политика безопасности содержимого разрешает только файлы самого приложения.
  • Собранное приложение нельзя запустить как обычную программу Node.js, и свой код оно загружает только из своего пакета.

Ключи других сервисов в графе

Прежде чем записать проект или workflow, приложение смотрит каждое поле каждой ноды. Кроме ключей провайдеров моделей, оно знает ключи сервисов, которые берут платные ноды ComfyUI (Replicate, fal, ElevenLabs, Runway, Tavily, Perplexity), и считает полем ключа поле с именем key, auth, …_key или по имени сервиса. Длинная случайная на вид строка в любом поле тоже заставляет приложение спросить перед сохранением: сохранить без неё или как есть.

Чужой текст

Веб-страницы, ответы модели, описания моделей и файлы, которые читает приложение, считаются данными. Они показываются или передаются модели как текст; сами по себе они не могут заставить приложение вызвать инструмент, открыть файл или обратиться по адресу. Веб-страница, которую читает помощник, открывается только по публичному адресу, никогда внутри вашей сети.

  • Текст, который уходит модели внутри блока данных, не может закрыть этот блок: каждое <data и </data внутри него, в любом регистре, меняется так, что больше не читается как тег.
  • Источники, на которые ссылается собственный поиск провайдера, не добавляются к страницам, которые может открыть помощник.
  • Скрытые символы, которые меняют, как читается имя (знаки направления текста, невидимые символы), показываются знаком � в заголовке ноды, в «Свойствах» и в карточке модели. Карточка модели ещё отмечает имя файла, где латиница смешана с похожими буквами другого алфавита. В значениях полей и заголовках групп они пока не показываются.
  • Объяснение, пришедшее с открытым файлом проекта, помечается «Из файла», даже если вы сами написали его раньше: приложение не может отличить ваш файл от чужого.

Уроки из файлов

Файл урока это только данные. Урок, которым поделились, никогда не может запустить код, открыть ссылку (его текст рисуется так, что ничего не открывает), заставить приложение обратиться к ComfyUI или что-то скачать, записать что-то кроме папки lessons профиля под именем из своего проверенного id, заменить встроенный урок (его id становится my:<id>) или добавить своё предложение в объяснения «почему», которые даёт приложение. У каждой строки и списка есть предел, управляющие символы и скрытые знаки направления текста отклоняются, а урок должен проходиться с пустого холста. Файл принимается целиком или не принимается. Формат файла урока

Паки нод и файлы моделей

  • Приложение никогда не ставит паки нод. Проверка и уроки советуют ставить паки через ComfyUI Manager или от автора, которому вы доверяете, и никогда по ссылке из workflow или заметки: пак выполняет свой код на вашем компьютере.
  • Карточка модели отмечает файлы .ckpt, .pt, .pth и .bin: эти форматы могут выполнить код, когда ComfyUI их загружает. Берите файл .safetensors той же модели. Небезопасные форматы моделей

Пределы размера и безопасный запуск

  • Workflow или проект больше 1500 нод или 3000 связей отклоняется, пока ничего не изменилось; субграфы считаются.
  • Файл больше 64 МБ не открывается. Ответ MCP-сервера и список нод, загруженный из файла, не больше 128 МБ; собственный список нод ComfyUI не больше 512 МБ.
  • Безопасный запуск: перед тем как холст рисует граф, приложение пишет «рисую» в graph-start.json, а после «нарисовано». Если прошлый запуск не дорисовал граф, приложение один раз спрашивает: «Начать с пустого холста» (так по умолчанию; граф остаётся в истории) или «Открыть граф снова».
  • Если прошлая синхронизация не закончилась (приложение закрылось или перестало отвечать), автосинхронизация ждёт, пока вы не запустите её через «Синхронизировать сейчас».

Файлы, которые пишет приложение

Папка с данными доступна только вашему пользователю (0700 в Linux). База и её журнальные файлы, журнал, журнал общения с моделью, сохранённые ключи, ваши уроки и graph-start.json создаются так, что читать их может только ваш пользователь (0600). Перед изменением схемы база копируется рядом с собой; повреждённая база откладывается в сторону, а не перезаписывается. Папка с данными

Как запускать безопасно

  • Не запускайте приложение от root и не выключайте его песочницу (--no-sandbox) сами. Chromium, который рисует окно, не запускается от root с включённой песочницей. .deb и .rpm сохраняют песочницу. Распакованные форматы (AppImage, .tar.gz) в Ubuntu 24.04 и новее запускаются без неё, потому что там она не работает без помощника, установленного от root, и пишут почему. Форматы пакетов
  • Проверка орфографии в окне выключена, поэтому словари не скачиваются.
  • Ставьте пакеты только со страницы Releases проекта и сверяйте указанную там контрольную сумму.

Как сообщить об уязвимости

Пожалуйста, не открывайте публичное обращение. Сообщите закрыто через GitHub: на вкладке Security репозитория выберите Report a vulnerability. Опишите, что может сделать злоумышленник, как это повторить и версию («Справка ▸ О программе ▸ Скопировать сведения»). Что входит в рамки, перечислено в файле проекта SECURITY.md.

См. также

Страница перенесена из wiki репозитория приложения (docs/wiki/trust/Security.ru.md, ревизия b8e3f71). То же руководство встроено в приложение: «Справка ▸ Руководство».

Чтобы обновить её, выполните npm run import, а затем npm run build в папке сайта.