Daten mit Javascript von anderer Domain in Webseite einfügen
relocate
- javascript
Hallo,
ein Bekannter hat auf seinem Webspace keine Möglichkeit Serverseitige Skripte zu nutzen. Es sollen nun daher Inhalte auf seiner Webseite mittels Javascript von meiner Webseite eingebunden werden, was mit XHTTPRequest wegen SOP (Same Origin Policy) nicht ohne weiteres geht.
Mittels JSONP soll es funktionieren und jetzt mal Dumm gefragt. Wie ich JSONP verstanden habe wird ein komplettes Skript von einer fremden Seite eingebunden und das soll weniger kritisch sein als XML Daten mittels XHTTPRequest zu empfangen?!
Gruß relocate
Hi, relocate!
3 Mal Ja: Ja, AJAX über Domänengrenzen hinweg funktioniert aufgrund der Same Domain Policy nicht. Ja, JSONp funktioniert so, dass ein Script von einer fremden Domain eingebunden wird und dieses eine Funktion in der Seite aufruft, die mit den entsprechenden Daten etwas macht*. Ja, das ist ein potentielles Sicherheitsproblem - man sollte nur Scripte von Domains aufrufen, die man sehr gut kennt, zum Beispiel seine eigene.
*Das funktioniert dann so:
Seite, die aufruft:
<script src="text/javascript">
mach_was_mit_den_daten(daten){
...
}
</script>
<script src="//server.der.antwortet/jsonp/resource.js?callback=mach_was_mit_den_daten" type="text/javascript"></script>
Server, der antwortet:
mach_was_mit_den_daten({daten});
Dabei wird der Callback-Name üblicherweise durch einen zufälligen String ersetzt, um zu vermeiden, dass ein Angreifer eine Antwort mit dem generischen Namen verwendet und so die in der Seite vorhandene Funktion benutzt, was einem die Möglichkeit gibt, zu prüfen, ob Inhalte im kritischen Bereich durch die Funktion geändert wurden oder nicht.
Gruß, LX
Hi LX,
dann wäre die Frage wie lange funktioniert das noch.
Die zweite wäre, wer von den Entwicklern denkt sich für die HTTP Requests eine Same Origin/Domain Policy aus und übersieht mal wieder eine kritischere Schwachstelle (meiner Meinung nach).
Bei Ajax soll das aber wohl wieder etwas geändert werden und die JSONP Schwachstelle bleibt wohl, weil viele Webdienste sonst nicht mehr funktionieren.
Danke für die Ausführungen, das mit dem Callback Namen ist eine gute Info, habe für JSONP nur die Funktionsweise gefunden die auf dieses zusätzliche Problem nicht einging.
Gruß relocate
dann wäre die Frage wie lange funktioniert das noch.
Die zweite wäre, wer von den Entwicklern denkt sich für die HTTP Requests eine Same Origin/Domain Policy aus und übersieht mal wieder eine kritischere Schwachstelle (meiner Meinung nach).
Nein ist es nicht. Der Zugriff auf fremde Seiten soll verhindern, dass du mit JS Daten aus fremden Seiten abfischen kannst. Mit einem Frame oder einem HTTP Request Objekt hast du ja Zugriff auf das DOM. Mit einem script Element kannst du aber kein DOM einbinden, sondern auschließlich JS Code.
Bei Ajax soll das aber wohl wieder etwas geändert werden und die JSONP Schwachstelle bleibt wohl, weil viele Webdienste sonst nicht mehr funktionieren.
JSONP bedeute lediglich, dass du auf deiner Seite die Freiheit hast, mit einem script-Element JS Code von einer fremden Domain einzubinden. Das wird auf manchen Seiten ausgenutzt und ist als XSS bekannt, aber für diese Lücke bist du als Seitenbetreiber verantwortlich, nicht der Browser.
Struppi.
Nein ist es nicht. Der Zugriff auf fremde Seiten soll verhindern, dass du mit JS Daten aus fremden Seiten abfischen kannst. Mit einem Frame oder einem HTTP Request Objekt hast du ja Zugriff auf das DOM. Mit einem script Element kannst du aber kein DOM einbinden, sondern auschließlich JS Code.
Oh, ich hatte bislang immer gedacht man kann nur aufbereitetes XML einbinden.
Eigentlich logisch, heißt ja nicht umsonst XHTTPRequest, hatte mich bislang nicht näher damit befasst, da auf meinem Webspace Serverseitig alles gemacht wird und ich sehr wenig Javascript nutze.
JSONP bedeute lediglich, dass du auf deiner Seite die Freiheit hast, mit einem script-Element JS Code von einer fremden Domain einzubinden. Das wird auf manchen Seiten ausgenutzt und ist als XSS bekannt, aber für diese Lücke bist du als Seitenbetreiber verantwortlich, nicht der Browser.
Struppi.
Schon klar, das XSS da ein Problem ist das habe ich bislang aber mit AJAX und XHTTPRequest in Verbindung die Möglichkeit über JSONP war mir vorher nicht bekannt. Ein Möglichkeit tatsächliche Dienste anderer Webseiten mittels Javascript ohne Serverseitige Skripte einzubinden wäre aber nicht schlecht.
das einbinden Domain-fremder Inhalte ist immer Kritisch.
Da dies beim XML-Request nicht geht, würde ich eine JSON-JS-File als einzigen aber unsicheren Weg sehen.