JavaScript Cross-Origin-Anfrage blockiert

Chrisel

Cadet 4th Year
Dabei seit
Sep. 2010
Beiträge
70
Hallo alle zusammen,
Ich habe folgendes Problem. Ich habe eine URL von der ich gerne das Format JSON lesen möchte. Tippe ich diese URL in die Browseradressleiste ein kommt der Text des JSON-Dokuments. Wenn ich nun per AJAX oder XMLHttpRequest-Object in Javascript versuche diesen Text in mein Programm zu laden kommt der Fehler
Cross-Origin-Anfrage blockiert: Die Same-Origin-Regel verbietet, die externe Ressource auf zu lesen. Dies kann gelöst werden, indem die Ressource auf die gleiche Domain geschoben wird oder CORS aktiviert wird.[/QUOTE] Habe mich schon ein wenig über den Fehler schlau gemacht und weiß soviel, dass es sich um eine Sicherheitsmaßnahme von Firefox handelt. Diese einfach abzuschalten ist keine Option für mich da später jeder darauf zugreifen können soll. Allerdings muss es doch irgendwie trotzdem funktionieren diesen Text in mein Programm zu laden, wenn man ihn schon von der Adressleiste problemlos laden kann. Irgendwelche Ideen? Viele Grüße Chrisel
 

dude90

Lt. Junior Grade
Dabei seit
März 2009
Beiträge
406
Dann rufe halt per Ajax eine PHP Datei auf, die dir dieses JSON runterlädt und dann das JSON als Rückgabewert gibt.
Anders geht es sonst nicht.

Außerdem ist das keine Meldung von Firefox, sondern von dem Addon NoScript.
 

Arzaiel

Ensign
Dabei seit
Okt. 2006
Beiträge
228
Wie bereits gesagt ist es standardmäßig verboten, per Javascript einen xmlhttprequest an einen anderen Host zu schicken.
Wenn du Kontrolle über die Webseite hast, in der das Javascript ausgeführt wird, dann kannst du diese Sicherheitsmaßnahme umgehen indem du einen bestimmten http-Header namens "Access-Control-Allow-Origin" mit deiner remote-Domain mitschickst. Dann sollte der xmlhttprequest problemlos funktionieren. Weiteres dazu kannst du hier nachlesen:
https://developer.mozilla.org/en-US/docs/Web/HTTP/Access_control_CORS
 

Chrisel

Cadet 4th Year
Ersteller dieses Themas
Dabei seit
Sep. 2010
Beiträge
70
Ah ok:) Also hab jetzt ein php Dokument geschrieben das das erledigt, aber wundert mich ja doch das es nicht ohne irgendwelche "normalen" maßnahmen geht. JSONP wäre eine Lösung das stimmt. Habe da auch schon ein Beispiel ausprobiert, allerdings habe ich keinen Einfluss drauf was mir die URL liefert, ich bin quasi nur derjenige der das zeug mittels Javascript auswertet, und nur weil ich keine callback funktion davor stehen habe funktioniert es schon nicht. Aber Danke für die schnelle Antwort!:)
 

Arzaiel

Ensign
Dabei seit
Okt. 2006
Beiträge
228
Du verstehst hoffentlich schon, dass das eine wahnsinnige XSS-Sicherheitslücke wäre, wenn man einfach einen xmlHttpRequest an eine x-beliebige Domain stellen könnte. Angenommen, jemand schafft es folgenden Code in eine Seite zu injizieren, die sensible Benutzerdaten (Kontodaten etc.) enthält:

Code:
window.onload = function() {
    kontonummer = document.getElementById("Kontonummer");
    // anderer Code

    // Sende xmlHttpRequest an evildomain.com mit POST-Inhalt Kontonummer etc.
};
Dann hat plötzlich der Angreifer die Kontodaten vom XSS-Opfer. Deshalb sollte das auf keinen Fall möglich sein, es sei denn der Betreiber der Seite hat dies ausdrücklich erlaubt, entweder per HTTP-Header oder per jsonp.
 
Top