Sfondo:
Sto progettando lo schema di autenticazione per un servizio web REST. Non è necessario "realmente" essere sicuri (è più un progetto personale) ma voglio renderlo il più sicuro possibile come un'esperienza di esercizio / apprendimento. Non voglio usare SSL poiché non voglio la seccatura e, soprattutto, le spese per la sua configurazione.
Queste domande SO sono state particolarmente utili per iniziare:
- Autenticazione RESTful
- Best practice per la protezione di un'API / servizio Web REST
- Esempi delle migliori API Web SOAP / REST / RPC? E perché ti piacciono? E cosa c'è che non va in loro?
Sto pensando di utilizzare una versione semplificata dell'autenticazione di Amazon S3 (mi piace OAuth ma sembra troppo complicato per le mie esigenze). Sto aggiungendo un nonce generato casualmente , fornito dal server, alla richiesta, per evitare attacchi di riproduzione.
Per arrivare alla domanda:
Sia S3 che OAuth si basano sulla firma dell'URL della richiesta insieme ad alcune intestazioni selezionate. Nessuno dei due firma il corpo della richiesta per le richieste POST o PUT. Questo non è vulnerabile a un attacco man-in-the-middle, che mantiene l'URL e le intestazioni e sostituisce il corpo della richiesta con tutti i dati desiderati dall'attaccante?
Mi sembra di poterlo evitare includendo un hash del corpo della richiesta nella stringa che viene firmata. È sicuro?