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

> Как Slicer защищает аккаунты, файлы и данные — шифрование, доступ администрации, вход, API и MCP, платежи, хранение, ИИ-провайдеры, уязвимости.

Источник: https://docs.slicer.media/security/

Вы доверяете Slicer личные видео, голос и тексты. Эта страница подробно и без маркетинга описывает, как мы их защищаем: что зашифровано и чем, кто и при каких условиях может получить доступ, что происходит при входе, оплате и удалении аккаунта. Мы намеренно не публикуем детали, которые облегчили бы атаку, — имена ключей, внутренние адреса и пороги срабатывания защиты.

Нашли уязвимость? Напишите на [security@slicer.media](mailto:security@slicer.media) — как это сделать, описано в конце страницы, в разделе «Сообщить об уязвимости».

## 1\. Принципы

-   **Минимум данных.** Мы собираем только то, без чего сервис не работает: материалы монтажа, email для входа, историю операций с токенами. Данные карт мы не получаем вовсе.
-   **Шифрование по умолчанию.** Файлы пользователей и чувствительные поля базы данных хранятся только в зашифрованном виде. Копия диска, резервная копия или выгрузка базы без ключа сервера бесполезны.
-   **Доступ только владельца.** Каждый запрос проверяет, что объект принадлежит вам. Чужой проект для вас не существует — даже его id ничего не даёт. Файл дополнительно сверяется с владельцем, записанным в его зашифрованном заголовке.
-   **Журнал на каждый доступ.** Входы, выходы, удаления, действия администрации и любой доступ к данным пользователя записываются в журнал безопасности, который нельзя незаметно изменить.

### От чего это защищает

| Кто | Что не сможет |
| --- | --- |
| Другой пользователь | увидеть ваши проекты, файлы и сессии |
| Внешний атакующий | войти вашей сессией, подделать запрос из браузера, заставить сервер обращаться во внутреннюю сеть, прочитать файлы сервера через подложенное «видео», подобрать коды входа |
| Тот, кто получил копию диска, бэкап или дамп базы | прочитать файлы, расшифровки, документы монтажа, названия, email, токены соцсетей — всё зашифровано ключом, которого нет ни на диске, ни в базе |
| Администратор хостинга без ключей | узнать содержимое — ему видны только структура базы, размеры и время файлов |
| Администрация Slicer | открыть ваши файлы незаметно — каждый такой доступ требует основания и навсегда остаётся в журнале |

### Честные ограничения

-   **Сервер расшифровывает данные, пока работает.** Монтаж, ИИ-анализ и отдача ролика вам требуют открытого содержимого. Шифрование защищает данные «в покое» — на дисках, в резервных копиях и выгрузках, — но не от того, кто полностью захватил работающий сервер. Поэтому ключи хранятся отдельно от данных, а доступ к серверам ограничен.
-   **ИИ-провайдеры получают фрагменты материалов** — ровно столько, сколько нужно для монтажа (раздел 12). Сквозное шифрование «только у пользователя» при серверном ИИ-монтаже невозможно.
-   **Ваше устройство.** Браузер может кэшировать ролики, приложение хранит токен входа в защищённом хранилище системы (Keychain). Защищайте устройство паролем.

## 2\. Шифрование файлов

Все файлы пользователей — исходники, свои фото, видео и музыка, готовые ролики, обложки, — а также рабочие каталоги проектов хранятся зашифрованными.

-   **Алгоритм** — AES-256-GCM. Файл шифруется блоками, каждый блок подписан: номер блока и признак последнего блока входят в подпись, поэтому блоки нельзя переставить, а файл — незаметно обрезать или подменить. Перемотка видео расшифровывает только нужные блоки.
-   **Свой ключ у каждого файла.** Ключ файла случайный (256 бит) и хранится в заголовке файла только в завёрнутом виде: мастер-ключом сервера и открытым ключом эскроу (раздел 4). Мастер-ключ хранится в секретах окружения сервера — не в коде, не в базе и не в хранилище файлов.
-   **Владелец в подписи.** Заголовок файла содержит владельца и вид объекта, и они тоже подписаны. При отдаче файла сервер сверяет владельца: если в записи пользователя каким-то образом оказался ключ чужого файла, файл не будет отдан, а попытка попадёт в журнал.
-   **Ротация ключей** перешифровывает только заголовки файлов, содержимое переписывать не нужно.

### Где файл бывает расшифрован

| Где | Когда | Сколько |
| --- | --- | --- |
| Приём загрузки | части файла шифруются по мере приёма | на диск в открытом виде не пишутся |
| Проверка загрузки | проверка формата и обложка | секунды, временный файл удаляется сразу |
| Рабочий каталог проекта | только пока задача (монтаж, экспорт, обработка) держит каталог в аренде | время задачи; затем исходники удаляются, остальное снова шифруется |
| Отдача владельцу | расшифровка на лету при скачивании или просмотре | на диск не пишется |

Рабочий каталог расшифровывается только под арендой задачи. Если процесс аварийно завершился, аренда истекает, а регулярная проверка находит брошенные каталоги и шифрует их снова. Файлы заменяются атомарно: читатель никогда не видит наполовину записанный файл.

## 3\. Шифрование данных в базе

Чувствительные поля базы данных зашифрованы отдельно, ключом, производным от мастер-ключа:

-   **личные данные** — email, имя, логин, токены провайдеров входа;
-   **тексты и документы** — названия проектов и файлов, документы монтажа, расшифровки речи, описания кадров, планы режиссёра, пожелания режиссёру, промпты ИИ-эффектов;
-   **устройства и журнал** — IP-адреса и данные браузера сессий, детали записей журнала безопасности;
-   **соцсети** — токены доступа платформ, имена аккаунтов, заголовки и описания публикаций;
-   **API** — имена API-токенов, последние IP их использования, секреты подписи вебхуков;
-   описания операций с токенами.

Служебные значения — id, статусы, размеры, длительности, суммы, настройки стиля — не зашифрованы: по ним работают поиск, сортировка и учёт. Поиск по зашифрованным полям (например, по названию проекта) выполняется в памяти сервера, а не в базе.

-   **Email** ищется по слепому индексу — криптографическому хэшу с секретным ключом. По нему можно найти аккаунт при входе, но нельзя восстановить адрес.
-   **Пароли** хранятся как хэш argon2id с параметрами не ниже рекомендаций OWASP, а сам хэш дополнительно зашифрован. Пароль не может совпадать с email и не должен быть из списка распространённых; требований «цифра и заглавная буква» нет — по рекомендациям NIST длина важнее.

## 4\. Доступ администрации

Иногда доступ к материалу действительно нужен — например, по обращению самого пользователя в поддержку или по законному требованию. Для этого есть единственный путь, и он устроен так, чтобы им нельзя было воспользоваться тайно.

-   **Эскроу-ключ.** Ключ каждого файла дополнительно завёрнут открытым ключом RSA-OAEP (SHA-256, не короче 3072 бит). Закрытая часть этого ключа хранится **офлайн** у одного ответственного человека — супер-админа — на зашифрованных носителях и никогда не попадает на сервер.
-   **Сервер не расшифровывает файлы для администрации.** Он отдаёт только шифротекст, расшифровка возможна лишь на компьютере супер-админа его закрытым ключом.
-   **Каждый доступ — с основанием.** Чтобы получить шифротекст, супер-админ входит в админ-панель паролем и одноразовым кодом (TOTP), недавно подтверждает вход кодом ещё раз и указывает основание — номер обращения или запроса. Сначала пишется запись в журнал, потом выдаётся файл; без записи файла нет. Даже просмотр списка объектов пользователя записывается.
-   **Журнал нельзя переписать.** Журнал безопасности только дополняется: изменение и удаление записей запрещены на уровне базы данных, а каждая запись содержит хэш предыдущей. Удалённая или изменённая запись разрывает цепочку, и проверка это показывает.
-   **Админ-панель** — отдельное приложение на своём адресе, со своей сессией и строгой политикой безопасности содержимого. Обычная сессия пользователя в ней не действует, а изменяющие действия требуют свежего подтверждения кодом и пишутся в журнал.

## 5\. Вход и сессии

-   **Серверные сессии.** Сессия хранится на сервере, токен в браузере или приложении — лишь её номер. Выход отзывает сессию сразу. В **Профиль** → **Вход и безопасность** видны все устройства; можно выйти на одном или на всех других. Сессия живёт до 30 дней и завершается после 14 дней без активности.
-   **Cookie** в браузере — с префиксом `__Host-`, `Secure`, `HttpOnly` и `SameSite=Strict`: скрипты страницы её не видят, а другие сайты не могут её отправить.
-   **Защита от подделки запросов (CSRF).** Изменяющий запрос с cookie принимается только с адресов приложений Slicer — по заголовку `Origin`. API принимает только JSON.
-   **Вход в приложении для iPhone, iPad и Mac** идёт через системный браузер. Приложение получает одноразовый код, который живёт минуты и обменивается на сессию только вместе с секретом, выданным этому приложению в начале входа, — по принципу PKCE. Перехватив код, чужое приложение сессию не получит. Токен сессии хранится в защищённом хранилище системы.
-   **Email и пароль.** Регистрация и восстановление пароля — с кодом из письма. Ответы на регистрацию и «Забыли пароль?» одинаковы для занятого и свободного адреса, а время ответа при входе выравнивается — по ним нельзя узнать, есть ли у человека аккаунт. Попытки входа и ввода кодов ограничены.
-   **Google, Apple, VK ID.** Аккаунт провайдера привязывается к существующему аккаунту Slicer только по подтверждённому провайдером email. Неподтверждённый email не даёт доступа к чужому аккаунту.
-   **Подтверждение для важных действий.** Смена email и пароля, удаление аккаунта, создание API-токена требуют недавнего входа — иначе Slicer попросит подтвердить, что это вы.

## 6\. API и MCP

-   **API-токены.** Токен — 256 случайных бит с узнаваемым префиксом `slc_` и контрольной суммой: сканеры утечек находят его в репозиториях, а сервер отсекает подделку ещё до поиска в базе. В базе хранится только HMAC токена — сам токен показывается один раз и восстановить его нельзя. У токена есть области доступа, срок и месячный лимит расходов; он отзывается в профиле мгновенно, а при удалении или блокировке аккаунта — автоматически. О создании токена приходит письмо.
-   **Только заголовок.** Публичное API и MCP принимают токен только в заголовке `Authorization` и не принимают cookie — сайт, открытый в вашем браузере, не может действовать от вашего имени.
-   **OAuth 2.1 для ИИ-агентов.** PKCE (`S256`) обязателен, токен привязан к ресурсу — MCP-серверу Slicer (RFC 8707), ответ авторизации содержит издателя (RFC 9207), что защищает от подмены сервера. Адреса возврата проверяются; опасные схемы запрещены. Код авторизации одноразовый и живёт 10 минут, токен доступа — час. Токены обновления меняются при каждом использовании, и повторное использование старого токена — как и повтор кода авторизации — отзывает всё подключение: так обнаруживается кража.
-   **Окно согласия** показывает, какое приложение просит доступ, куда вернётся ответ, какие права и какой лимит расходов вы выдаёте. Приложения, зарегистрированные автоматически, помечены как непроверенные.
-   **Подтверждение цены.** Ни одна платная операция API и MCP не тратит токены без явно подтверждённой цены, а лимит расходов не даёт превысить бюджет даже при ошибке в программе или в рассуждениях модели.
-   **Кадры для вашего ИИ-ассистента — только по запросу.** Когда ассистент монтирует сам ([Свой режиссёр](https://docs.slicer.media/mcp/own-director/)), кадры исходников уходят в ИИ, который выбрали вы, — только по вашему токену с областью `projects:read`, только те, что ассистент запросил (до 16 за вызов, 512 точек), и только в ответе инструмента: ссылок на файлы при этом не появляется. Кадры извлекаются под той же защитой рабочего каталога, что рендер, и сразу удаляются.
-   **Правила режиссёра остаются на сервере.** Ассистент получает только ваш материал — речь по словам, паузы, дубли, пожелания — и общие советы: правил и уроков ИИ-режиссёра Slicer нет ни в брифе, ни в промптах MCP, ни в ответах инструментов. Правила применяются к плану ассистента на сервере, а в ответ приходят исправления и замечания. По той же причине запись **Задание режиссёру** в [«Чате»](https://docs.slicer.media/guide/ai/chat/#journal) по умолчанию не показывается.
-   **План ассистента — данные.** План ролика и наблюдения по кадрам от ассистента ничего не исполняют: Slicer проверяет их схемой, применяет к ним свои правила и только потом сохраняет ролик новой ревизией.
-   **Защита MCP от подмены адреса.** Браузерные запросы к MCP-серверу принимаются только с доверенных источников — это защищает от атак через подмену DNS.
-   **Лимиты запросов** считаются на токен и на подключение; идемпотентные ключи исключают двойные списания при повторах.

## 7\. Вебхуки

-   Каждое событие подписано HMAC-SHA256 с меткой времени в заголовке `Slicer-Signature`. Получатель проверяет подпись и отклоняет запросы старше 5 минут — так перехваченное событие нельзя отправить повторно ([как проверять](https://docs.slicer.media/api/webhooks/)).
-   Секрет подписи показывается один раз и хранится зашифрованным.
-   Адрес вебхука — только публичный `https`; он проверяется при создании и перед каждой отправкой, а перенаправления не выполняются — поэтому вебхук нельзя направить во внутреннюю сеть Slicer.
-   В тело события не попадают секреты и токены — только те же данные, что отдаёт API владельцу.

## 8\. Защита сервера

-   **Запросы во внешний мир (SSRF).** Когда сервер скачивает файл по ссылке — результат ИИ, импорт по адресу, загрузка в соцсеть, — он обращается только по `https` и только к публичным адресам, проверяя каждое перенаправление и ограничивая размер. Внутренние сети, адреса облачных метаданных и локальные адреса недоступны.
-   **Обработка видео без сети.** Видеопроцессор запускается без командной оболочки, с таймаутом и с запретом сетевых протоколов; файлы пользователей открываются только по белому списку форматов для своего вида. Плейлисты и списки внутри «видео», которыми можно было бы прочитать файлы сервера, не открываются.
-   **Проверка загрузок** — по расширению и по фактическому содержимому файла, с ограничениями размера, длительности и разрешения кадра. Имена файлов очищаются от путей, управляющих и невидимых символов. Квоты на загрузки защищают от переполнения диска.
-   **Лимиты запросов** — по адресу и по токену, отдельно для входа, платных операций и загрузки.
-   **Заголовки безопасности:** строгая политика содержимого (CSP), HSTS, `Referrer-Policy: no-referrer`, Cross-Origin-Resource-Policy, запрет кэширования ответов API с личными данными, таймауты медленных запросов.
-   **Проверка конфигурации при запуске.** Сервер не стартует в рабочем режиме с небезопасными настройками: со слабыми или стандартными секретами, без ключей шифрования, с адресами без `https`.
-   **Ошибки без подробностей.** Клиент получает понятный код и текст ошибки, но не внутренние сообщения, пути или ответы сторонних сервисов.

## 9\. Ссылки без входа

Файлы отдаются только владельцу — после входа или по токену API. Исключений три, все узкие и временные:

| Ссылка | Что можно | Чего нельзя |
| --- | --- | --- |
| **Публикация в Instagram.** Instagram принимает ролик только по ссылке, поэтому на время публикации создаётся временная ссылка | скачать один файл этой публикации | что-либо ещё; ссылка содержит 256 случайных бит, работает только пока публикация обрабатывается и не дольше 2 часов, удаляется сразу после ответа Instagram, каждое скачивание записывается |
| **Загрузка файла** (`uploadUrl` в API и MCP) | отправить один файл заявленного размера в одну загрузку | прочитать что-либо, узнать об аккаунте, использовать повторно; ссылка содержит 256 случайных бит, в базе — только HMAC, живёт до часа и гаснет после первой попытки |
| **Доступ ИИ к файлу** — только с вашего разрешения (ниже) | скачать один кусок, который нужен модели ИИ | открыть что-либо ещё из проекта или аккаунта; ссылка содержит 256 случайных бит, живёт не дольше часа и отзывается сразу после обработки |

Публичных ссылок на скачивание готовых роликов нет.

### Доступ ИИ к файлам проекта

Обычно сервисы ИИ получают от Slicer нужные куски напрямую, без ссылок. Но некоторые модели берут файл только по адресу — сейчас это [удаление объекта](https://docs.slicer.media/guide/editor/erase/). Для них действуют правила:

-   **Только с разрешения.** Без него файл не уходит: перед операцией Slicer показывает окно **Доступ ИИ к файлу** — **Разрешить один раз**, **Разрешить для проекта** или **Не разрешать**. Разрешение для проекта действует только в этом проекте и выключается в его **Параметры**; по умолчанию оно выключено.
-   **Только нужный кусок.** У удаления объекта — кусок фрагмента до 5 секунд и маска объекта, каждый — отдельной ссылкой. Не весь исходник, не проект и не аккаунт.
-   **Ненадолго.** Ссылка действует не дольше часа и отзывается сразу после ответа модели, копия куска удаляется. Ссылки, которые не удалось отозвать сразу (например, при перезапуске сервера), гасит регулярная уборка по сроку.
-   **Под шифрованием.** Копия куска хранится зашифрованной, как все файлы пользователей, и отдаётся только по ссылке, без кэширования. Сама ссылка — 256 случайных бит; в журнал она не записывается.
-   **Журнал.** Каждая выданная ссылка видна вам в **Параметры** проекта, в списке **Выданные ссылки**: для чего, что открыто (номер исходника и секунды куска, без текста и имён файлов), когда выдана, сколько раз её скачали и отозвана ли. Кнопка **Отозвать все ссылки** гасит действующие немедленно, выключение переключателя — тоже. Выдача и каждое скачивание записываются и в журнал сервера.

Подробно для пользователя — [Доступ ИИ к файлам](https://docs.slicer.media/guide/projects/ai-access/).

## 10\. Платежи

-   Пакеты оплачиваются на странице ЮKassa — данные карты вводятся там, Slicer их не получает и не хранит.
-   Токены зачисляются только после того, как сервер сам запросил статус платежа в API ЮKassa. Содержимому входящего уведомления мы не доверяем: оно лишь повод проверить.
-   Ответ ЮKassa сверяется с нашей записью: номер платежа, сумма и связь с покупкой. Расхождение не зачисляется и записывается в журнал.
-   Зачисление идемпотентно: повторное уведомление или проверка не начислят токены дважды. Неподтверждённые платежи регулярно сверяются с ЮKassa.
-   Все движения токенов — записи, которые только добавляются; баланс вычисляется из них, а не правится вручную.

## 11\. Хранение и удаление

| Что | Сколько хранится |
| --- | --- |
| Исходники и промежуточные файлы монтажа | 7 дней после завершения монтажа |
| Незавершённые загрузки | удаляются через сутки |
| Готовые ролики и их версии (последние 10 с файлами) | пока вы не удалите проект |
| Свои фото, видео и музыка редактора | вместе с проектом или по сроку хранения исходников |

**Удаление аккаунта** (**Профиль** → **Вход и безопасность**) необратимо: отзываются все сессии, API-токены и подключённые приложения, останавливаются идущие операции, удаляются проекты, файлы и шаблоны, отзывается доступ входа через Apple, а запись пользователя обезличивается — email, имя, пароль и коды стираются.

Что остаётся после удаления:

-   обезличенные платежи и операции с токенами — их требует бухгалтерский учёт;
-   журнал безопасности — он только дополняется, а детали записей зашифрованы;
-   метка «бесплатный ролик использован» — в виде слепого индекса email, по которому адрес восстановить нельзя. Она нужна, чтобы бесплатный первый ролик нельзя было получать повторно, пересоздавая аккаунт.

## 12\. ИИ-провайдеры

Монтаж выполняют ИИ-модели внешних провайдеров. Каждый получает только то, что нужно для своей задачи:

| Задача | Что передаётся |
| --- | --- |
| Распознавание речи | звуковая дорожка |
| Анализ кадров | отдельные кадры в уменьшенном размере |
| Режиссура, помощник, перевод | текст расшифровки, описания кадров, ваши пожелания и команды |
| ИИ-эффект, удаление фона, отделение голоса | только выбранные отрезки видео или звука |
| Удаление объекта | кусок фрагмента (до 10 секунд — частями до 5 секунд) и маска объекта — по временной ссылке, только с вашего разрешения (раздел 9) |
| ИИ-увеличение до 4K | готовый ролик в 1080p, частями |
| ИИ-аватар и закадровый голос | текст для озвучки и выбранное вами фото (для аватара) |
| Медиа-карточки | описание картинки |

-   Мы используем API-тарифы провайдеров, по условиям которых данные клиентов не используются для обучения моделей.
-   Результаты провайдеров — временные ссылки; сервер сразу скачивает их (с теми же проверками от SSRF) и сохраняет в зашифрованное хранилище.
-   Ваш текст — пожелания режиссёру, команды помощнику — передаётся модели отдельным блоком с явной пометкой, что это данные пользователя, а не инструкции, и что формат ответа менять нельзя. Ответ модели всегда проверяется по строгой схеме, а время склеек — детерминированным валидатором.
-   Передача данных провайдерам описана в оферте.

## Сообщить об уязвимости

Если вы нашли уязвимость в Slicer — в приложениях, API, MCP-сервере или на сайтах, — напишите на [security@slicer.media](mailto:security@slicer.media). Контакты для исследователей также опубликованы в файле `/.well-known/security.txt`.

Что указать в письме:

-   где уязвимость: адрес, эндпоинт, экран или версию приложения;
-   шаги воспроизведения и что удалось получить;
-   как с вами связаться для уточнений.

Просим исследователей:

-   проверять только на своих аккаунтах и данных, не обращаться к чужим данным и не изменять их;
-   не нагружать сервис (никаких DoS и массового перебора) и не использовать социальную инженерию против пользователей и команды;
-   не раскрывать уязвимость публично, пока мы её не исправим.

Мы подтвердим получение письма, будем сообщать о ходе исправления и с вашего согласия упомянем вас в благодарностях.

## Что дальше

[Токены и области доступаКак безопасно работать с API-токенами.](https://docs.slicer.media/api/authentication/)[Безопасность и расходы MCPКак агент подтверждает траты.](https://docs.slicer.media/mcp/costs/)[Вход и безопасностьУстройства, пароль и способы входа в приложении.](https://docs.slicer.media/guide/account/security/)
