Безопасность
Как устроена защита данных в Klinersha, что работает сейчас, и что мы планируем сделать в ближайших релизах.
Изоляция данных организаций
В бета-версии: полная изоляция на уровне базы — в плане
Данные каждой организации должны быть полностью изолированы от данных других организаций. Сейчас это обеспечивается двумя слоями:
- RLS на уровне PostgreSQL включён на четырёх таблицах интеграции — там, где идёт обмен с внешними системами и риск утечки максимален.
- Фильтры приложения в Python-коде FastAPI добавляют
organization_idк каждому запросу. Это покрывает остальные таблицы, где RLS пока не настроен.
Двухслойная схема работает, но это инженерный компромисс: приложение должно не забыть добавить фильтр. Полная изоляция на уровне базы — это когда RLS покрывает все таблицы, и приложение физически не может прочитать чужие данные, даже если ошибётся.
Известное ограничение (урок пилота 19.08)
В ходе пилота 19 августа выяснилось: вызовset_tenant_contextв PostgreSQL терял контекст послеcommit, и последующий запрос с RLS возвращал ноль строк без ошибки.
Это типичная ловушка: ошибка выглядит как «пустой результат», а не как исключение. Именно поэтому мы не утверждаем «изоляция на уровне базы работает» — пока RLS не покрывает все таблицы и не защищён тестами на каждом слое, остаются серые зоны.
План закрытия
Применяемmigrations/003_harden_rls_policies.sql— расширение RLS на все таблицы организаций. Перед применением на проде каждый запрос проходит проверку на PostgreSQL, а не на SQLite в тестах, иначе урок 19.08 повторится.
Архитектурное обоснование — вarchitecture/sales-blockers/03-marketing-truth-and-trust.mdиarchitecture/sales-blockers/01-billing-and-legal.md.
Шифрование и резервные копии
Шифрование данных
Соединения с сервером идут по TLS. Пароли и чувствительные поля хранятся в базе в виде хеша, а не открытым текстом. Данные на диске сервера защищены шифрованием диска.
Ежедневные резервные копии
Снимки базы делаются ежедневно и хранятся в отдельном от рабочего сервера месте. Тест восстановления из бэкапа проводится регулярно по регламенту эксплуатации.
Доступ и роли
В Klinersha три типа доступа к организации: собственник, менеджер и клинер/горничная. Каждая роль видит только то, что нужно для работы: горничная — задачи и чек-листы, менеджер — задачи, отчёты и сотрудников, собственник — всё плюс настройки организации и биллинг.
На уровне ручек FastAPI доступ проверяется единымbefore_request-хуком (по образцу fanoteli), а не декоратором на каждом роуте — это закрывает класс багов «забыли поставить проверку».
Сессия закрывается по таймауту. Закрытый доступ к интерфейсу администратора — через отдельный путь с дополнительной авторизацией.
Соответствие требованиям
152-ФЗ «О персональных данных»в плане
Заявление о полном соответствии 152-ФЗ появится на сайте, когда выполнены три вещи:
- опубликована политика обработки персональных данных
- форма регистрации содержит согласие на обработку
- подано уведомление в РКН
Сейчас заявление о соответствии снято с витрины. Юридическая часть — в работе (блокер 01 из серии sales-blockers).
Что мы НЕ делаем
- Не публикуем фейковых отзывов и рейтингов в JSON-LD (агрегат-рейтинг был — снят).
- Не выдумываем «кейсы клиентов» с процентами: раздел переименован в «Сценарии использования» и не привязан к реальным или выдуманным организациям.
- Не обещаем готовых коннекторов к PMS (Bnovo, Ostrovok и т.п.), пока их нет в коде.
Остались вопросы по безопасности?
Напишите в Telegram — ответим в течение рабочего дня и пришлём подробности по архитектуре.