Fundo:
Estou projetando o esquema de autenticação para um serviço web REST. Isso "realmente" não precisa ser seguro (é mais um projeto pessoal), mas quero torná-lo o mais seguro possível como uma experiência de exercício / aprendizado. Não quero usar SSL, pois não quero o aborrecimento e, principalmente, as despesas de configuração.
Essas perguntas de SO foram especialmente úteis para começar:
- Autenticação RESTful
- Práticas recomendadas para proteger uma API REST / serviço da web
- Exemplos das melhores APIs da web SOAP / REST / RPC? E por que você gosta deles? E o que há de errado com eles?
Estou pensando em usar uma versão simplificada da autenticação do Amazon S3 (gosto do OAuth, mas parece muito complicado para minhas necessidades). Estou adicionando um nonce gerado aleatoriamente , fornecido pelo servidor, à solicitação, para evitar ataques de reprodução.
Para chegar à pergunta:
O S3 e o OAuth dependem da assinatura do URL da solicitação, juntamente com alguns cabeçalhos selecionados. Nenhum deles assina o corpo da solicitação para solicitações POST ou PUT. Isso não é vulnerável a um ataque man-in-the-middle, que mantém o URL e os cabeçalhos e substitui o corpo da solicitação por quaisquer dados que o invasor queira?
Parece que posso me proteger disso, incluindo um hash do corpo da solicitação na string que é assinada. Isso é seguro?