Живым или с пруфами. Дело № 001: гексагон от хакеров
В нашем городе появился гексагон, который защищает от хакеров. Правда, поддерживать его почти невозможно. Так объясняют архитектуру в ролике канала @drdev.
Открываю «Живым или с пруфами». Здесь буду разбирать технические советы, после которых хочется положить перед автором первоисточник: «Читай, ковбой. Мы прикроем».
Улика первая. Гексагон записали в микросервисы. На 12:30–12:51 автор представляет гексагональную архитектуру как разновидность микросервисной. Формулировка ближе к концу фрагмента: «сильно навороченная микросервисная архитектура».
Гексагональную архитектуру можно применить внутри одного монолитного приложения. Её задача - отделить прикладную логику от способов ввода и вывода. Порт задаёт контракт взаимодействия, адаптер связывает его с конкретной технологией. Разносить эти части по отдельным сервисам необязательно.
В статье Алистера Кокберна пример вообще построен на небольшом приложении для расчёта скидки. Микросервисную империю для этого никто не разворачивает.
Улика вторая. Адаптер назначили охранником. На 19:34–19:56 автор объясняет: при хакерской атаке отключаем адаптер, всё продолжает работать и «никаких сливов информации» не происходит.
Отключение интеграции может быть частью реакции на инцидент. Но граница между классами сама по себе не останавливает злоумышленника и не возвращает уже утёкшие данные.
Вот мысленный пример: обработчик позволяет запросить чужой заказ по его номеру, потому что проверку прав забыли. Запрос прекрасно пройдёт через порт и адаптер. Все слои на месте, чужой заказ уехал клиенту. OWASP рекомендует проверять права на каждом запросе.
Улика третья. Архитектуру отправили на вечный покой. На 21:12–21:45 звучит «поддерживать это почти невозможно». Дальше подход связывают с приложениями, которые доделали и оставили в покое.
У подхода есть цена: дополнительные интерфейсы, переходы между частями кода, необходимость следить за границами. Для маленькой задачи это может быть лишним. Но возможность тестировать логику отдельно и заменять внешние компоненты как раз помогает при изменениях. У Кокберна есть пример расширения существующей системы новыми адаптерами.
При этом на 17:41–17:50 автор верно говорит о независимости ядра от базы данных. Эта мысль вполне годится. Последующие обещания безопасности из неё уже не следуют.
Представляю хакера: базу уже скачал, а тут ему адаптер отключили. Пришлось всё удалить - против гексагона не попрёшь.