Задний план:
Я разрабатываю схему аутентификации для веб-службы REST. Это не «действительно» должно быть безопасным (это скорее личный проект), но я хочу сделать его настолько безопасным, насколько это возможно, как упражнение / учебный опыт. Я не хочу использовать SSL, так как не хочу хлопот и, в основном, затрат на его настройку.
Эти вопросы были особенно полезны, чтобы начать меня:
- RESTful аутентификация
- Рекомендации по защите REST API / веб-службы
- Примеры лучших веб-API SOAP / REST / RPC? И почему они тебе нравятся? И что с ними не так?
Я думаю об использовании упрощенной версии аутентификации Amazon S3 (мне нравится OAuth, но она кажется слишком сложной для моих нужд). Я добавляю случайно сгенерированный одноразовый номер , предоставленный сервером, в запрос, чтобы предотвратить повторные атаки.
Чтобы добраться до вопроса:
И S3, и OAuth полагаются на подпись URL запроса вместе с несколькими выбранными заголовками. Ни один из них не подписывает тело запроса для запросов POST или PUT. Разве это не уязвимо для атаки «человек посередине», которая сохраняет URL-адрес и заголовки и заменяет тело запроса любыми данными, которые хочет атакующий?
Кажется, что я могу защититься от этого, включив хеш тела запроса в строку, которая подписывается. Это безопасно?