Код-ревью Senior Моделирование угроз обновлено
Ревью: спецификация API перевода между счетами
Вопрос
Посмотрите на фрагмент спецификации API и найдите угрозы ещё до реализации.
paths:
/api/transfers:
post:
summary: Перевод между счетами
security: []
requestBody:
content:
application/json:
schema:
properties:
from_account: { type: string }
to_account: { type: string }
amount: { type: number }
initiated_by: { type: string, description: "id пользователя" }
responses:
"200": { description: "Перевод выполнен, возвращает балансы обоих счетов" }
Коротко
Ревью спецификации дешёвая форма моделирования угроз: многие ошибки авторизации и логики видны ещё до кода. Хорошая практика: требования безопасности прямо в OpenAPI (security, ограничения схем, заголовок Idempotency-Key).
Что должен найти ревьюер
- Безопасностьстрока 5
security: []: эндпоинт перевода без аутентификации. - Безопасностьстрока 10
from_accountот клиента без требования проверить, что счёт принадлежит пользователю (BOLA, Spoofing). - Безопасностьстрока 12
amountтипа number без ограничений: отрицательные суммы, ноль, дробные копейки, огромные значения. Нужны minimum, точность и лимиты. - Безопасностьстрока 13
initiated_byпередаёт клиент: подмена инициатора и отказ от действия. Инициатор берётся из токена. - Безопасностьстрока 15Ответ раскрывает баланс счёта получателя (Information disclosure).
- Безопасностьстрока 3Нет ключа идемпотентности: повтор запроса выполнит перевод дважды.
Разбор
Ревью спецификации дешёвая форма моделирования угроз: многие ошибки авторизации и логики видны ещё до кода. Хорошая практика: требования безопасности прямо в OpenAPI (security, ограничения схем, заголовок Idempotency-Key).
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.