1.Две площадки, два места хранения
Granilo работает на двух отдельных площадках с отдельными базами данных. Компания находится ровно на одной из них, и её данные не переходят на другую; площадки обмениваются только подписанной проверкой при входе: к какой из них относится адрес почты.
Сервис писем получает только адрес получателя и текст письма.
2.Каждая компания отделена в самой базе данных
Каждая таблица с данными компаний защищена политикой доступа на уровне строк, обязательной для всех ролей: запрос видит только строки той компании, для которой он выполняется. Приложение задаёт компанию один раз на транзакцию, и ни одна роль базы данных, которой пользуется приложение, не может обойти это правило. Поэтому ошибка в нашем коде не вернёт строки другой компании.
Важные журналы в самой базе данных можно только дополнять: историю изменений камней, перемещения и мемо, движения металла, оплаты и расход ИИ-кредитов нельзя изменить или удалить, даже нам через приложение. Выставленный счёт база данных замораживает.
3.Шифрование и файлы
Все соединения идут по HTTPS с HSTS, а приложение подключается к базе данных по TLS. Пароли хранятся только в виде хешей с солью. Файлы лежат в закрытом хранилище и открываются только по подписанным ссылкам, которые истекают через несколько минут.
4.Вход, роли и себестоимость
Вход по паролю или коду из письма, вторым шагом можно добавить приложение-аутентификатор. Пароли из известных утечек не принимаются, а попытки входа и запросы кодов ограничены по частоте.
У каждого сотрудника своя роль: владелец, администратор, сотрудник или наблюдатель. Доступ к себестоимости включается отдельно и проверяется на сервере: без него себестоимость не уходит в браузер вообще, ни в списках, ни в PDF, ни на этикетках, ни в истории.
5.Подписанные сертификаты подлинности
Сертификат подписывается один раз, при выпуске, ключом Ed25519 по его каноническому содержимому (RFC 8785). База данных отклоняет любое последующее изменение подписанного содержимого, а публичная страница проверяет подпись при каждом открытии.
Любой может проверить подпись сам, без нас: открытые ключи, включая выведенные из работы, опубликованы по адресу https://granilo.ru/.well-known/jwks.json
6.Сами страницы
Страницы отдаются со строгой политикой безопасности содержимого и новым одноразовым ключом на каждый запрос, без сторонних скриптов, шрифтов и трекеров: всё загружается с нашего домена. Каждая форма и каждый вызов сервера защищены от межсайтовых запросов.
7.Нашли уязвимость?
Напишите нам. Мы ответим в течение 2 рабочих дней, будем держать вас в курсе исправления и не будем иметь претензий к добросовестному исследованию, которое не затрагивает данные других клиентов.
Почта для сообщений об уязвимостях:contact@granilo.ru
См. также: Соглашение, Персональные данные