Frage: Ist diese API-Authentifizierungstechnik leicht hackbar?API Authentifizierung Design und Hackbarkeit
apiKey = "123456789"
apiCallId = "1256341451"
apiSecret = "67d48e91ab2b7471d4be2a8c2e007d13"
sig = md5(apiKey + apiCallId + apiSecret) = 09c297a354219f173bfc49c2e203ce03
wo
apiKey
: einige eindeutige Kennung für den BenutzerapiCallId
: eine eindeutige ganze Zahl, die im Wert (zB UNIX Zeitstempel) zuzunehmen mussapiSecret
: string nur bekannt an den Benutzer und uns - nicht in URL übergebensig
: "unhackable" Signatur dieses API-Aufrufs - MD5 Hash
Beispiel API-Aufruf:
http://api.domain.com/?apiKey=123456789&apiCallId=1256341451&sig=09c297a354219f173bfc49c2e203ce03¶m1=x¶m2=y
Diese API erfordert keine Sitzung, und ist nicht für eine dritte Partei im Namen eines Benutzers zu verwenden entworfen. Stattdessen soll es vom Benutzer selbst verwendet werden.
Ich mag die Einfachheit dieser. Die Anforderung von apiCallId
ist einzigartig, und immer zu erhöhen bedeutet eine sig
Wiederverwendung ist nicht möglich, so dass ich fühle, wie es sicher ist (geschützt gegen Replay-Attacken), aber ich bin kein Experte.
Andere APIs verwenden alle GET-Parameter alphabetisch sortiert bei der Berechnung der sig
, aber ich sehe nicht, warum dies erforderlich ist, wenn apiCallId
.
Bitte versuchen Sie dies zu hacken, bevor es implementiert und freigegeben wird.
Ich freue mich über Feedback, Anregungen und Sicherheit Bildung.
Super Antwort, und ich liebe das technische Detail. "Erickson" wies darauf hin, dass Interception (Man-in-the-Middle) mit dem oben genannten möglich ist. Haben Sie eine Empfehlung, wie Sie diese Art von Angriff verhindern können? Ich denke, das geht über die ursprüngliche Frage hinaus. Bedeckt die Verwendung von HTTPS (und nicht HTTP) es? –
Wenn der MAC alle Daten abdeckt, _and_ gibt es keinen zweiten Eingang, der auf den gleichen Eingang zum MAC kanonisiert (das ist wichtig, wie Amazon gelernt hat), und Sie stellen sicher, dass es keine Replay-Attacken gibt (Ihr Counter Schema, korrekt implementiert, scheint OK), und Ihr MAC ist sicher, dann sollten Sie gegen MITM sicher sein. Das liegt daran, dass ein Angreifer keine Optionen hat - er kann einen Parameter- oder API-Wert ändern und versuchen, ihn zu senden, aber es wird keine Möglichkeit geben, den korrekten MAC-Wert zu generieren, so dass der Aufruf (sollte) abgelehnt werden sollte. –
Ich nehme an, Sie erzwingen die Call-ID wird immer von einer Datenbanktabelle erhöht. Seien Sie vorsichtig, wenn Sie nur einen gültigen Mac akzeptieren. Andernfalls könnte jeder zufällige Angreifer apiKey = your_id und apiCallId = 9999999999999999 ... und einen Garbage-MAC-Wert senden und einen leichten Denial-of-Service verursachen. Auf HTTPS: Sie können es verwenden, tun Sie dies - zum einen wird es die Vertraulichkeit der API-Eingaben (und die RPC-Antworten) schützen, und nur im Allgemeinen machen Angriffe auf Ihre Auth-Schema viel schwieriger. –