Начальный · Глава 1 / 18
Защищаем конкретную ценность
После главы: Нарисовать границы доверия для маленького магазина.
В этой главе
Актив важнее страшного названия
Безопасность начинается с вопроса, какую потерю нельзя допустить. У учебного магазина есть полные книги, заказы, права покупателей и настройки оплаты. Потери различаются: посторонний прочитал чужую книгу; цена изменилась без разрешения; владелец не может восстановить заказы. Список технологий сам по себе не описывает эти последствия. Запишите актив, владельца и нежелательное событие обычным языком.
Затем проведите путь данных. Браузер отправляет запрос серверу, сервер читает хранилище, внешний сервис сообщает о платеже. Каждый переход соединяет области с разным доверием. Текст из браузера не становится достоверным оттого, что его прислала наша кнопка. Посетитель может сформировать другой запрос; это нормальная предпосылка проектирования, а не повод изучать чужие системы.
Минимальная поверхность
Публичная карточка книги и полный файл должны иметь разные правила доступа. Открытость кода интерфейса естественна для веба: браузеру необходимы HTML, стили и JavaScript. Задача состоит не в сокрытии всего клиентского кода, а в отсутствии там секретов, закрытых рукописей и решений о правах. Переменная с красивым именем не превращает публичный файл в защищённый.
Для каждого актива выберите один проверяемый барьер и одну проверку. Если полная книга хранится вне публичной папки, попробуйте её получить гостевым запросом к предусмотренному учебному маршруту. Такая проверка относится только к собственному локальному приложению. Она доказывает поведение конкретного маршрута, но не отсутствие всех возможных утечек.
У барьера есть предположение
Дополните каждую строку модели условием: кому доверяем и что произойдёт при нарушении? Шифрование диска помогает при потере носителя, но не запрещает приложению с правами чтения выдать книгу гостю. TLS защищает транспорт, но не определяет владельца заказа. Защитный механизм имеет смысл только относительно конкретной угрозы.
Для учебной схемы проверьте путь целиком: основное хранилище, предпросмотр, кеш, экспорт, журнал и резервная копия. Книга может оказаться закрытой на странице и открытой в другом представлении. Отдельно отметьте доступность: запретить всё легко, но тогда законный покупатель тоже теряет результат.
От ценности к приёмочному случаю
Для каждого актива выберите один наблюдаемый запрет и один законный путь. Полная книга должна быть недоступна гостю, но доступна владельцу подтверждённого права. Цена не принимается из браузера, но корректный заказ должен сохранять выбранное серверное предложение. Резервная копия должна восстанавливать данные, а не только существовать. Эти пары не дают защите превратиться в полное выключение полезной функции. В итоговом эталоне активы представлены вымышленными байтовыми строками и словарями в памяти. Это позволяет изолированно проверить решение доступа, но не является тестом настоящего PDF, платёжного провайдера или файловой системы.
Закрывает ли шифрование диска ошибку доступа в приложении? Нет. Приложение с доступом к расшифрованным данным всё ещё обязано проверить право получателя.
Разобранный пример
Три строки модели угроз
Пример — данные для обсуждения, а не сканер. Каждой угрозе назначен контролируемый барьер. Слова «зашифровать всё» без указания границы не отвечают, кто вправе получить расшифрованный файл.
pythonthreats = [
('full_book', 'guest_read', 'server_entitlement'),
('order_price', 'client_change', 'server_catalog'),
('orders', 'lost_storage', 'tested_restore'),
]
assert len({asset for asset, _, _ in threats}) == 3Теперь самостоятельно
Практика
Для черновика персональной книги укажите владельца, два нежелательных события и по одной проверке. Вымышленный черновик хранится на сервере и доступен автору заказа.
Результат: Две строки «событие → барьер → ожидаемый тест».
Подсказка
- Рассмотрите чтение другим пользователем и потерю данных отдельно.
Решение и проверка
Событие чтения чужим пользователем: барьер — проверка владельца на сервере; тест — пользователь Б запрашивает черновик пользователя А и не получает содержание.
Событие потери после сбоя: барьер — резервная копия с ограниченным доступом; проверка — восстановление в изолированную среду и сравнение с контрольной записью. Наличие файла копии без успешного восстановления ещё не доказывает пригодность.
Проверьте себя без текста
Почему нельзя спрятать секрет в клиентской переменной?
Код и значения, отправленные браузеру, доступны получателю.
Что означает граница доверия?
Место перехода данных между областями с разными полномочиями и гарантиями.
Проверить по первоисточникам
Конец образца
Полный том содержит 18 глав, решения, итоговый проект и словарь. Продажи откроются после предметной редактуры и подключения магазина.