Antecedentes:
Estoy diseñando el esquema de autenticación para un servicio web REST. Esto no "realmente" necesita ser seguro (es más un proyecto personal) pero quiero hacerlo lo más seguro posible como una experiencia de ejercicio / aprendizaje. No quiero usar SSL ya que no quiero la molestia y, sobre todo, el costo de configurarlo.
Estas preguntas SO fueron especialmente útiles para comenzar:
- Autenticación RESTful
- Mejores prácticas para asegurar una API REST / servicio web
- ¿Ejemplos de las mejores API web SOAP / REST / RPC? ¿Y por qué te gustan? ¿Y qué les pasa?
Estoy pensando en usar una versión simplificada de la autenticación de Amazon S3 (me gusta OAuth pero parece demasiado complicado para mis necesidades). Estoy agregando un nonce generado aleatoriamente , suministrado por el servidor, a la solicitud, para evitar ataques de repetición.
Para llegar a la pregunta:
Tanto S3 como OAuth confían en firmar la URL de solicitud junto con algunos encabezados seleccionados. Ninguno de ellos firma el cuerpo de la solicitud para las solicitudes POST o PUT. ¿No es esto vulnerable a un ataque de hombre en el medio, que mantiene la url y los encabezados y reemplaza el cuerpo de la solicitud con los datos que el atacante desea?
Parece que puedo protegerme de esto al incluir un hash del cuerpo de la solicitud en la cadena que se firma. ¿Es esto seguro?