Hintergrund:
Ich entwerfe das Authentifizierungsschema für einen REST-Webdienst. Dies muss nicht "wirklich" sicher sein (es ist eher ein persönliches Projekt), aber ich möchte es so sicher wie möglich machen, wie eine Übung / Lernerfahrung. Ich möchte kein SSL verwenden, da ich den Aufwand und vor allem die Kosten für die Einrichtung nicht möchte.
Diese SO-Fragen waren besonders nützlich, um mir den Einstieg zu erleichtern:
- RESTful Authentifizierung
- Best Practices zum Sichern einer REST-API / eines Webdienstes
- Beispiele für die besten SOAP / REST / RPC-Web-APIs? Und warum magst du sie? Und was ist los mit ihnen?
Ich denke darüber nach, eine vereinfachte Version der Amazon S3-Authentifizierung zu verwenden (ich mag OAuth, aber es scheint für meine Anforderungen zu kompliziert zu sein). Ich füge der Anforderung eine zufällig generierte Nonce hinzu , die vom Server bereitgestellt wird, um Wiederholungsangriffe zu verhindern.
Um auf die Frage zu kommen:
Sowohl S3 als auch OAuth müssen die Anforderungs-URL zusammen mit einigen ausgewählten Headern signieren. Keiner von beiden signiert den Anforderungshauptteil für POST- oder PUT-Anforderungen. Ist dies nicht anfällig für einen Man-in-the-Middle-Angriff, bei dem die URL und die Header beibehalten und der Anforderungshauptteil durch die vom Angreifer gewünschten Daten ersetzt werden?
Es scheint, als könnte ich mich dagegen schützen, indem ich einen Hash des Anforderungshauptteils in die Zeichenfolge einbinde, die signiert wird. Ist das sicher?