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

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

15
Что мы доказываем
01
Чего не хватает

Изоляция

Граница — это база данных, а не условие в коде.

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

Как обычно

WHERE tenant_id = ?

Все клиенты в одних и тех же таблицах. Разделение — это фильтр, который кто-то должен не забыть написать в каждом запросе, всегда. Достаточно забыть один раз.

Здесь

USE ajja_tenant_…

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

ajja_tenant_<slug>

Одна база данных на клиента
Она называется ajja_tenant_<o-teu-nome> и содержит только ваши 140 таблиц. Соединение при каждом запросе переключается на ту базу, которая принадлежит вам.

DROP DATABASE

Удалить — значит удалить
Когда клиент уходит, его база данных удаляется целиком. Не остаётся записи, помеченной как удалённая и ожидающей, пока кто-нибудь это заметит.

кто вы · на что подписаны · какие модули

Центральная база знает минимум
Центральная база данных хранит, кто вы, на что вы подписаны и какие у вас модули. Повседневная работа через неё никогда не проходит.

Учётные записи и доступ

Кто входит, как входит и докуда доходит.

Каждая из этих проверок выполняется на сервере. Ни одна из них не зависит от того, что браузер решит показать или скрыть.

  1. 01 TOTP · 8 кодов · зашифрованный секрет

    Два шага, если вы хотите

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

  2. 02 5 минут

    У второго шага есть срок

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

  3. 03 вход 5/мин · 2FA 10/мин · регистрация 3/час · API 120/мин

    Число попыток ограничено

    Вход ограничивается одновременно по email и по адресу: пять попыток в минуту для одной и той же пары, двадцать в минуту для одного и того же адреса. Если считать только email, посторонний мог бы заблокировать вам учётную запись, намеренно ошибаясь. Двухфакторная проверка, регистрация и публичные формы регистрации заезда и бронирования тоже ограничены. Аутентифицированный API ограничен 120 запросами в минуту на пользователя, а не на адрес — два коллеги в одном офисе не делят между собой лимит.

  4. 04 модуль + роль · 403

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

    Скрыть пункт меню — это не безопасность. Каждый адрес проходит две отдельные проверки — модуль активен у этого клиента, и ваша роль видит этот модуль — и отвечает 403 даже тому, кто вводит адрес вручную.

  5. 05 404, а не 403

    Токен работает только в своём доме

    Действительный токен, направленный на имя другого клиента, ничего не читает. А ответ — 404, а не 403: тот, кто подбирает имена клиентов, не узнаёт, какие из них существуют.

  6. 06 один ресурс на одну ссылку

    Порталы без учётной записи

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

Один запрос, от начала до конца

Семь вопросов, прежде чем кто-либо увидит хоть одну вашу строку.

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

  1. 01 404

    Чей это дом?

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

  2. 02 402

    Подписка активна?

    Приостановленное рабочее пространство не обслуживается, даже для чтения.

  3. 03 →

    Направить соединение

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

  4. 04 401

    Кто запрашивает?

    Токен проверяется. Без действительного токена пятого шага не будет.

  5. 05 429

    Сколько запросов вы уже сделали?

    120 в минуту, считается на пользователя. Сверх этого сервер говорит «хватит».

  6. 06 404

    Вы принадлежите этому клиенту?

    Пользователь токена и клиент запроса должны совпадать. Именно эта связка не позволяет легитимному токену читать соседний дом.

  7. 07 403

    Можете ли вы видеть этот модуль?

    Модуль должен быть активен у клиента и виден вашей роли. Две проверки, а не одна.

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

Что записывается

Кто что сделал, включая нас.

Система, которая ничего не записывает, заставляет вас верить на слово. Мы предпочитаем, чтобы вы могли проверить.

Данные принадлежат вам

Выход открыт и обозначен.

Платформа, которая затрудняет уход, признаёт, что иначе она вас удержать не может.

один запрос, один файл

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

без штрафов

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

Что входит в выгрузку

  • Клиенты
  • Проекты
  • Счета
  • Записи
  • Галереи
  • Фотографии
  • Бронирования
  • Заказ-наряды
  • Позиции
  • Маршруты
  • Документы
  • Предложения
  • Команда
  • Подписка
  • Обращения в поддержку

Чего у нас пока нет

Короткий список, пока вы не нашли это сами.

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

Остались вопросы, на которые эта страница не ответила?

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

14 дней бесплатно, карта проверяется без списания. Отмените до 15-го дня после оформления подписки — и вы ничего не платите.