Ограничение слишком быстро отправляемых транзакций

#api #security #web-applications #owasp

Вопрос:

В моем веб-приложении у меня есть серверная часть, предоставляющая API, и интерфейсное приложение, которое их использует.

В соответствии со стандартом проверки безопасности приложений OWASP:

Приложение будет обрабатывать потоки бизнес-логики только в последовательном порядке шагов, при этом все шаги будут обрабатываться в реальном человеческом времени

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

Если это одно приложение, возможно, мы сможем проверить разницу во времени между отрисовкой и отправкой формы, так как мы используем API-интерфейсы, не зная, как это можно проверить.

Ответ №1:

Давайте предположим следующее. У нас есть трехэтапный процесс. Эти шаги заключаются в следующем:

  • шаг 1
  • шаг 2
  • шаг 3

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

Если мы в состоянии (потому что мы используем, например, сеанс сервера для хранения данных), то решение простое. Давайте сохраним в сеансе, что последним шагом, который сделал пользователь, был шаг 1, и включим метку времени. При выполнении шага 2 мы проверяем данные, сохраненные в предыдущем сеансе.

Если мы хотим быть без гражданства, то мы можем перенести информацию о том, что пользователь выполнил шаг 1 с некоторой отметкой времени, на клиент, но подписать ее с помощью некоторого кода аутентификации сообщения (MAC). Здесь мы столкнемся с очевидным недостатком, заключающимся в том, что пользователь может попытаться повторно использовать такие данные и сфабриковать множество вызовов шага 2, выполнив шаг 1 только один раз. Чтобы исправить это, нам нужно было бы углубиться и включить некоторые трудно угадываемые идентификаторы транзакций, которые мы также можем проверить. Это сделало бы все решение проблемы специфичным.