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