Используйте TLS и подписывайте запрос вместе с timestamp, уникальным nonce, методом, адресом и телом. Сервер проверяет подпись, допустимый возраст и атомарно запрещает повторное использование nonce.
Как защитить REST API от атак повторения (replay attacks), если злоумышленник перехватил валидный HTTP-запрос?
Используйте TLS и подписывайте запрос вместе с timestamp, уникальным nonce, методом, адресом и телом. Сервер проверяет подпись, допустимый возраст и атомарно запрещает повторное использование nonce.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Используйте TLS и подписывайте запрос вместе с timestamp, уникальным nonce, методом, адресом и телом. Сервер проверяет подпись, допустимый возраст и атомарно запрещает повторное использование nonce.
Срок хранения nonce должен покрывать всё допустимое окно времени; ключ связывают с клиентом или ключом подписи. Проверка «есть ли nonce» и его запись не должны расходиться по конкурентным запросам. Подпись без контроля повторов не предотвращает replay. Для операций с побочными эффектами дополнительно нужен idempotency key с сохранением результата. Одна идемпотентность не заменяет аутентификацию. Готовую схему подписания лучше брать из стандарта, а не собирать собственную каноникализацию.
Источник: www.rfc-editor.org.