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

Как устроена защита данных

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

СПбСерверы в России
12 чСрок жизни сессии
24 чМаксимум потери данных
216Точек записи в журнал

Где живут данные

Облако Kitamo в России
01

Серверы в Санкт-Петербурге

Приложение, базы данных, файлы, сервер видеозвонков и редактор документов работают на собственных серверах Kitamo в Санкт-Петербурге. Рабочие данные хранятся в России.

02

Отдельная база у каждой компании

Данные компании лежат в её собственной базе, а не в общих таблицах с пометкой владельца. Компания определяется по адресу, и запрос работает только с её базой. Базы и служебные сервисы снаружи недоступны.

03

Редактор и звонки тоже свои

Документы Word и Excel правятся на собственном сервере редактора, видеозвонки идут через собственный медиасервер. Сторонним облачным сервисам файлы и разговоры не передаются.

Вход и сессии

Проверяемые параметры
04

Хеширование паролей

bcrypt с параметром сложности 10, соль в 128 бит генерируется для каждого пароля отдельно и хранится внутри хеша. Исходный пароль в базе не хранится и восстановлению не подлежит. Минимальная длина — 8 символов, новый пароль не может совпадать с текущим.

05

Сессия живёт 12 часов

Токен сессии зашифрован, а не просто подписан. Пока вкладка открыта, срок продлевается; при бездействии сессия завершается сама. Состояние учётной записи сверяется с базой раз в минуту.

06

Мгновенный отзыв доступа

Смена пароля, кнопка «выйти со всех устройств», блокировка или увольнение сотрудника аннулируют все его сессии на всех устройствах. Повторное приглашение тоже обнуляет старые входы.

07

Защита cookie

Cookie сессии недоступна скриптам страницы, передаётся только по HTTPS, помечена префиксом __Secure-, ограничена политикой SameSite=Lax и привязана к конкретному узлу без поддоменов.

08

Подбор пароля перекрыт на трёх уровнях

Десять попыток на учётную запись за 15 минут, тридцать с одного адреса за те же 15 минут и триста по всей системе за 5 минут. Окно скользящее, счётчики общие для всех процессов приложения.

09

Первый вход только со сменой пароля

Сотрудник получает временный пароль на 7 дней, сгенерированный системой. До его смены закрыты и страницы, и программный интерфейс. Администратор не придумывает пароли за людей и не знает их.

Хранение и передача

Шифрование и доступ
10

Секреты почтовых ящиков зашифрованы

Пароли приложений и токены доступа к подключённым ящикам хранятся в базе в виде AES-256-GCM: случайный вектор инициализации на каждую запись и метка подлинности, которая не даёт подменить содержимое.

11

Одноразовые ссылки коротко живут

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

12

Файлы отдаются только через проверку прав

Хранилище закрыто от веб-сервера, прямых ссылок на файлы не существует. Каждое скачивание проходит проверку доступа к задаче, чату или проекту. Имя файла на диске задаёт сервер, поэтому выйти за пределы каталога через имя невозможно.

13

Ссылка для заказчика ограничена и отзывается

Публичная ссылка на папку содержит случайный токен в 192 бита, работает только внутри своей папки и отзывается одной кнопкой. Всё, кроме картинок и PDF, отдаётся на скачивание, а не исполняется в браузере.

14

Заголовки безопасности

Строгий транспорт HSTS на два года с поддоменами, запрет угадывания типа содержимого, запрет встраивания в чужие страницы, ограничение передачи адреса перехода и доступа к камере с микрофоном.

15

Ограничение частоты запросов

Публичные формы, ссылки для заказчика и тяжёлые отчёты защищены отдельными лимитами: от 5 заявок за полчаса до 120 обращений за 10 минут в зависимости от адреса. Счётчики хранятся в Redis и общие для всех процессов.

Кто что видит

Разграничение доступа
16

Права проверяются на сервере

Около 135 отдельных прав, сгруппированных по разделам. Проверка идёт не в интерфейсе, а при каждом обращении к данным, поэтому прямая ссылка или запрос в обход интерфейса ничего не дадут.

17

Видимость по членству

Закрытый проект виден только его участникам. Даже право «видеть все проекты» его не раскрывает — нужен отдельный, специально выданный доступ.

18

Внешние участники изолированы

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

19

Разделы скрываются по подразделениям

Целый раздел системы можно закрыть для подразделения. Он исчезает из меню, недоступен по прямой ссылке и закрыт на уровне запросов к данным.

20

Журнал действий

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

Резервные копии и восстановление

Проверяется автоматически
21

Ежедневная копия

База, файловое хранилище и файл настроек копируются каждую ночь. База хранится 14 дней, файлы и настройки — 30. Перед каждым обновлением системы делается дополнительная копия базы.

22

Восстановление проверяется каждую неделю

По понедельникам система сама разворачивает последнюю копию во временную базу, сверяет число записей и удаляет её. Если проверка не прошла, администратору уходит письмо. Резервная копия, которую никто не проверял, — это не резервная копия.

23

Цели восстановления заданы

Потеря данных не более суток, возврат к работе за 10–15 минут. Порядок восстановления описан по шагам, файл настроек в копии зашифрован отдельным ключом.

24

Наблюдение и оповещения

Два служебных адреса показывают, жив ли процесс и доступны ли база с Redis. Письмо администратору уходит при всплеске серверных ошибок, при всплеске неудачных входов, при сбое проверки восстановления и при новых уязвимостях в зависимостях.

Разработка

Что делается постоянно
25

Еженедельная проверка зависимостей

Каждый понедельник система сама проверяет библиотеки на известные уязвимости и присылает письмо, если найдены критические или высокие. Та же проверка выполняется при каждой сборке.

26

Обновления по уязвимостям выкатываются

Это не декларация: по результатам аудита обновлялись фреймворк, библиотека обработки изображений и почтовый модуль, число известных уязвимостей в рабочих зависимостях сократилось с двенадцати до семи, остальные разобраны и признаны неприменимыми.

27

Проверки прав в наборе тестов

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

28

Публичные ссылки проверяются извне

Отдельная проба обращается к системе обычными запросами без учётной записи и проверяет 24 условия: что подмена идентификатора файла в адресе не отдаёт чужой файл, что случайный токен не открывает ничего, что отозванная ссылка отвечает «не найдено», а просроченная — «больше не действует», что поток запросов упирается в ограничение. Проверку можно повторить вместе с вашей службой безопасности на адресе вашей компании и увидеть результат своими глазами.

29

Аудит безопасности с открытым списком

Проведён аудит всех программных адресов системы с формальным перечнем находок и статусом каждой. Список не прячется: что закрыто, что закрыто частично и что требует ресурсов, зафиксировано в документации проекта и обсуждается с заказчиком.

Честно о том, чего пока нет

В планах

Обещать всё сразу было бы нечестно, а вы всё равно спросите на переговорах. Отдельно скажем главное: всё описанное выше — наши собственные проверки, а не заключение независимого аудитора. Проверки можем повторить вместе с вашей службой безопасности и готовы к внешнему тестированию на проникновение за ваш счёт или за наш по договорённости. Чего пока нет: политика содержимого страниц на рабочем сервере работает в режиме наблюдения, а резервные копии хранятся на том же сервере. Всё это в работе, сроки обсуждаем предметно под требования вашей службы безопасности.

Нашли уязвимость?

Напишите на info@spb-ir.ru с пометкой «security». Мы отвечаем в течение трёх рабочих дней, не преследуем за добросовестное исследование и сообщаем, когда проблема закрыта.

Обсудить требования безопасности