it-swarm.com.de

Verhindern von XSS für REST API

Ich habe eine Spring REST API und ein Client-Projekt. Die HTML-Seite von Client-Projekten verwendet jquery ajax-Aufrufe, um Daten aus der REST API im json- oder xml-Format abzurufen. Meine Frage ist, XSS-Angriffe auf eine Webseite zu vermeiden. Wo soll ich die Codierung von Benutzereingabedaten (d. H. Nicht vertrauenswürdigen Daten) durchführen? Derzeit codiere ich Daten in meinen REST Controller, bevor ich die Antwort zurücksende. Ich verfolge den Spickzettelartikel von OWASP XSS Prevention. Aber da in meinem Szenario alles Ajax-Aufrufe und Daten sind, die von json abgerufen und mit jquery in HTML eingegeben werden, ist nicht sicher, wo der Benutzer den Encoder zum Codieren nicht vertrauenswürdiger Daten verwenden soll. Ist das Einfügen der Codierung in REST Controller eine gute Option?

Vielen Dank im Voraus.

15
MShah

Wenn die API REST API) lediglich JSON (und niemals HTML) zurückgibt, wird der HTML-Code in JavaScript clientseitig maskiert.

Unabhängig davon, ob die HTML-Seite des Clients JQuery-Vorlagen verwendet oder HTML mit Aufrufen von Funktionen wie .html() erstellt, verfügt keine dieser Funktionen standardmäßig über einen XSS-Schutz. Ein Ansatz besteht darin, dass der Client-Code bei allen nicht vertrauenswürdigen Eingaben explizit eine Escape-Funktion aufruft. Ich bevorzuge jedoch die Verwendung eines JQuery-Plugins, das automatisch maskiert. Hier sind zwei Ansätze dafür:

Die Leute kritisieren diesen Ansatz möglicherweise mit den Worten: "Sie können sich aus Sicherheitsgründen nicht auf die clientseitige Kontrolle verlassen." Diese Kritik beruht auf Missverständnissen; In diesem speziellen Fall können Sie sich darauf verlassen.

Es ist bemerkenswert, dass AngularJS standardmäßig eine automatische Escape-Funktion enthält. Wenn sie JQuery heute von Grund auf neu schreiben würden, würde JQuery dies wahrscheinlich auch einschließen.

Einer der Gründe, warum HTML-Escapezeichen in der API REST nicht ausgeführt werden), besteht darin, dass möglicherweise ein Nicht-HTML-Client die API verwendet. In diesem Fall möchten Sie definitiv nicht, dass HTML-Escapezeichen angewendet werden .

Es ist wichtig, dass Sie JSON mit dem richtigen Content-Type-Header (application/json) zurückgeben, um API-Missbrauchsangriffe zu vermeiden.

27
paj28