Как защитить REST API от атак повторения (replay attacks), если злоумышленник перехватил валидный HTTP-запрос?

Используйте TLS и подписывайте запрос вместе с timestamp, уникальным nonce, методом, адресом и телом. Сервер проверяет подпись, допустимый возраст и атомарно запрещает повторное использование nonce.

Короткий ответ

Что ответить на собеседовании

Используйте TLS и подписывайте запрос вместе с timestamp, уникальным nonce, методом, адресом и телом. Сервер проверяет подпись, допустимый возраст и атомарно запрещает повторное использование nonce.

Подробный разбор

Ответ с пояснениями

Используйте TLS и подписывайте запрос вместе с timestamp, уникальным nonce, методом, адресом и телом. Сервер проверяет подпись, допустимый возраст и атомарно запрещает повторное использование nonce.

Срок хранения nonce должен покрывать всё допустимое окно времени; ключ связывают с клиентом или ключом подписи. Проверка «есть ли nonce» и его запись не должны расходиться по конкурентным запросам. Подпись без контроля повторов не предотвращает replay. Для операций с побочными эффектами дополнительно нужен idempotency key с сохранением результата. Одна идемпотентность не заменяет аутентификацию. Готовую схему подписания лучше брать из стандарта, а не собирать собственную каноникализацию.

Источник: www.rfc-editor.org.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее