T-Rex: Same Origin Policy (SOP) umgehen

Hoi,

Vorhaben: User klicken auf ein Bild. Per onclick javascript wird ein ajax zu einem anderen Server aufgebaut wo dieser Click in einer Logdatei registriert wird. Wir wollen eine kleine Statistik aufbauen, wo wer hin clickt. Das ganze MUSS über 2 Domains laufen. Sprich auf der Domain http://www.a.de liegt die HTML Seite. Auf http://www.b.de liegt das php was mittels ajax angesteuert werden soll um den Klick mit zu loggen.

Problem: Hab schon ein wenig rumgesucht nach meinem Javascript Fehler (uncaught exception: Access to restricted URI denied (NS_ERROR_DOM_BAD_URI)), welcher in meiner localen Testumgebung nicht auftritt. Ich bin überzeugt davon, dass das Problem http://de.wikipedia.org/wiki/Same_Origin_Policy dieses SOP zeugs ist. Das SOP ding ist eigentlich ziemlich Klasse bezüglich fremder Angriffe etc... aber mich stört es doch sehr.

Kann man das eventuell umgehen?

Danke
T-Rex

  1. Kann man das eventuell umgehen?

    Mittels einem Proxy auf der Quelldomain.

    1-Zeichen-Second-Level-Domains sind unter .de. übrigens nicht vorgesehen - zudem solltest du dich bitte mit RFC 2606, im besonderen mit Abschnitt 3 "Reserved Example Second Level Domain Names", beschäftigen.

  2. Yerf!

    Kann man das eventuell umgehen?

    Wenn es nur ein GET-Request sein soll und im Browser keine Antwort ausgewertet werden muss, dann kann man auch per JS ein Image-Objekt mit entsprechender URI erzeugen.

    Gruß,

    Harlequin

    --
    <!--[if IE]>This page is best viewed with a webbrowser. Get one today!<![endif]-->
  3. Hallo,

    das kannst du mit verschiedenen Techniken machen - nur nicht XMLHttpRequest (ohne Cross-Domain-Erweiterungen).

    • Bilder laden (siehe Harlequin) oder sonstige Objekte und Plugins
    • Scripte laden
    • theoretisch auch Stylesheets laden
    • versteckte iframes

    Bis auf die iframe-Methode kannst du da immer GET-Daten in der URI mitschicken, was eigentlich reichen sollte. Den Query String kannst du mit JavaScript zusammensetzen.
    Mit dem iframe könntest du zur Not auch POST-Daten über ein unsichtbares Formular versenden, aber wozu der Aufwand.

    Kann man das eventuell umgehen?

    Muss und sollte man gar nicht, so Sachen wie Statistiken funktionieren wunderbar mit Same-Origin-Policy. Same-Origin-Policy heißt, dass die Scripte einer Domain Ressourcen einer anderen nicht insofern auslesen können, dass sie Zugriff auf das DOM bzw. den Quellcode haben. Um bloß einen GET-Request irgendwohin abzusenden und ein paar Daten im Query-String mitzugeben, ist das auch gar nicht nötig, weil man wie gesagt Scripte, Bilder, Stylesheets und auch HTML-Dokumente als solche von fremden Servern einbetten kann. Und mit JSONP ist es sogar möglich, gezielt JavaScript-Daten abzufragen.

    Mathias

  4. hi,

    Kann man das eventuell umgehen?

    Mit Ajax bleib innerhalb Deiner Domäne. Die Kommunikation mit der weiteren Domäne kann das serverseitige Script machen, sofern es keine Secure Policies gibt, die das unterbinden.

    Hotte

    --
    Wenn der Kommentar nicht zum Code passt, kann auch der Code falsch sein.