2017-10-28 2 views
1

Angenommen, Sie entwickeln eine Anwendung, die aus einer Back-End-HTTP-API besteht, die eine Front-End-Benutzeroberfläche bereitstellt. Wenn die Benutzeroberfläche im Browser des Clients gerendert wird, muss sie bestimmte Aufrufe an das Backend tätigen (z. B. Daten für Ansichten abrufen). Alle diese Anrufe können jedoch beispielsweise in der Entwicklerkonsole von Chrome überprüft werden. Dadurch werden die Gesamtlogik und die internen API-Endpunkte meiner Anwendung angezeigt.Soll (und wie) eine Backend-API, die von einer Frontend-Benutzeroberfläche verwendet wird, gesichert werden?

Ist dies ein Problem für eine Webanwendung? Ich schaute mich auf einigen anderen Websites um (z. B. Reddit), und ich konnte tatsächlich überprüfen, ob ein API-Aufruf durchgeführt wurde, und es gelang mir sogar, ihn über cURL zu reproduzieren und die gleiche Antwort zurück zu erhalten.

Meine erste Idee, dies zu lösen, wäre, alle Daten zu verschlüsseln und intern in der Frontend-App entschlüsseln zu lassen. Ich glaube jedoch nicht, dass dies viel Sicherheit bieten würde, da der private Schlüssel im Quellcode der App fest codiert werden müsste, was auch von modernen Browsern überprüft werden kann. Außerdem könnte sich dies erheblich auf die Leistung der Anwendung auswirken.

Das Beste, was ich mir vorstellen konnte, war, irgendwie ein Token (JSON Web Tokens, vielleicht?) Zu der Sitzung zuzuweisen (die wiederum einem Benutzer zugewiesen ist). Dieses Token wird benötigt, um die API-Aufrufe auszuführen, und möglicherweise könnte es eine kurze Ablaufzeit haben. Das Token kann jedoch weiterhin in der HTTP-Anforderung angezeigt werden.

Irgendwelche Ideen?

+0

Fonsec - Ich suche Alternativen für das gleiche Problem und würde gerne wissen, was hast du abgeschlossen? –

Antwort

0

Ich verwende bcrypts =>https://www.npmjs.com/package/bcryptjs + jsonwebtokens in meiner MEAN App für das gleiche. Bcryptjs erstellt auf der Serverseite ein Salz und sendet ein verschlüsseltes Token an den Client. Dasselbe Token wird für API-Aufrufe verwendet. Dies macht die Decodierung für einen Phishing-Versuch etwas schwieriger.

Verwenden Sie stattdessen HTTPS. =>Are querystring parameters secure in HTTPS (HTTP + SSL)?

+1

Vielen Dank für Ihre Vorschläge. Ich benutze natürlich HTTPS, aber ich kann das vorgeschlagene Paket nicht verwenden, da ich das Frontend in Elm erstelle, und ich möchte mich nicht auf externe JS-Aufrufe verlassen –

Verwandte Themen