Hintergrund:
Ich entwickle das Authentifizierungsschema für einen REST-Webdienst. Dieser muss nicht "wirklich" sicher sein (es ist eher ein persönliches Projekt), aber ich möchte ihn als Übung/Lernerfahrung so sicher wie möglich machen. Ich möchte kein SSL verwenden, da ich den Aufwand und vor allem die Kosten für die Einrichtung nicht tragen möchte.
Diese SO-Fragen waren besonders nützlich, um den Einstieg zu finden:
- RESTful-Authentifizierung
- Best Practices für die Sicherung einer REST-API / eines Webdienstes
- Beispiele für die besten SOAP/REST/RPC-Web-APIs? Und warum gefallen sie Ihnen? Und was ist falsch an ihnen?
Ich überlege, eine vereinfachte Version von Authentifizierung bei Amazon S3 (Ich mag OAuth aber für meine Bedürfnisse scheint es zu kompliziert zu sein). Ich füge eine zufällig generierte nonce die der Server der Anfrage beifügt, um Wiederholungsangriffe zu verhindern.
Um auf die Frage zurückzukommen:
Sowohl S3 als auch OAuth beruhen auf der Signierung der Anfrage-URL zusammen mit einigen ausgewählten Headern. Keiner von ihnen unterschreibt den Antrag für POST- oder PUT-Anfragen. Ist dies nicht anfällig für einen "Man-in-the-Middle"-Angriff, bei dem die URL und die Kopfzeilen erhalten bleiben und der Anfragebody durch die vom Angreifer gewünschten Daten ersetzt wird?
Es scheint, dass ich mich dagegen schützen kann, indem ich einen Hash des Anforderungskörpers in die Zeichenfolge einfüge, die signiert wird. Ist dies sicher?