Tło:
Projektuję schemat uwierzytelniania dla usługi internetowej REST. To nie „naprawdę” musi być bezpieczne (jest to bardziej osobisty projekt), ale chcę, aby było to tak bezpieczne, jak to możliwe, jako ćwiczenie / nauka. Nie chcę używać protokołu SSL, ponieważ nie chcę problemów i, głównie, kosztów związanych z jego konfiguracją.
Te pytania SO były szczególnie przydatne na początek:
- RESTful Authentication
- Najlepsze praktyki dotyczące zabezpieczania interfejsu API / usługi REST
- Przykłady najlepszych internetowych interfejsów API SOAP / REST / RPC? A dlaczego je lubisz? A co z nimi nie tak?
Zastanawiam się nad użyciem uproszczonej wersji uwierzytelniania Amazon S3 (lubię OAuth, ale wydaje się to zbyt skomplikowane dla moich potrzeb). Do żądania dodaję losowo generowaną wartość jednorazową , dostarczoną przez serwer, aby zapobiec atakom związanym z odtwarzaniem.
Aby przejść do pytania:
Zarówno S3, jak i OAuth polegają na podpisywaniu adresu URL żądania wraz z kilkoma wybranymi nagłówkami. Żadne z nich nie podpisuje treści żądania POST lub PUT. Czy nie jest to podatne na atak typu man-in-the-middle, który utrzymuje adres URL i nagłówki oraz zastępuje treść żądania dowolnymi danymi, których chce atakujący?
Wygląda na to, że mogę się temu zapobiec, włączając hash treści żądania do podpisywanego ciągu. Czy to jest bezpieczne?