[JS] XMLHttpRequest geeft 'Access Denied' op subdomain

Pagina: 1
Acties:

Acties:
  • 0 Henk 'm!

  • r0bert
  • Registratie: September 2001
  • Laatst online: 30-07 02:32
Heb ik mijn script bijna klaar, loop ik weer tegen zoiets aan. Vast een probleem wat al meer mensen gehad hebben (maar waarom vond ik dan geen oplossing :X ).

Mijn script maakt gebruik van XmlHttpRequest (en als dat er niet is ActiveX) zoals iedereen dat doet die dat wiel een keer uitgevonden heeft. Nu weet ik van de beveiligingsrestricties die gelden, maar dacht dat deze niet golden voor subdomeinen.

Ik heb boven ieder domein gezet
JavaScript:
1
document.domain = 'domein.ext'

De gewone bestanden staan op subdomein x, de static js-libraries staan op y. Normaal gesproken zou ik alleen x.domein.ext kunnen bereiken vanuit de gewone bestanden, maar volgens deze pagina 'JavaScript Security: Same Origin' zou ik door document.domain te vermelden ook de subdomeinen als y.domein.ext moeten kunnen bereiken (en andersom).

Helaas lukt dat dus niet. Wie heeft er eerder met dit bijltje moeten hakken?

De foutmelding die Firefox geeft:
code:
1
2
3
4
Fout: uncaught exception: [Exception... 
   "Access to restricted URI denied"  code: "1012" 
   nsresult: "0x805303f4 (NS_ERROR_DOM_BAD_URI)"  
   location: "http://y.domein.ext/js/class.xmlmessage.js Line: 47"]

Ook in dat bestand staat document.domain

Internet Explorer 6 en 7 zijn het met elkaar eens dat:
code:
1
Toegang geweigerd.

Hier gepast is. Blijkbaar is dat artikel wat ik gevonden heb gewoon fout?

[ Voor 6% gewijzigd door r0bert op 11-08-2008 21:34 ]


Acties:
  • 0 Henk 'm!

  • crisp
  • Registratie: Februari 2000
  • Laatst online: 00:51

crisp

Devver

Pixelated

XHR 'luistert' niet naar document.domain (Firefox heeft dat wel een tijdje gedaan maar is daar weer vanaf gestapt).

Op zich is dat ook wel logisch; document.domain werkt alleen als aan *beide* (source en target) kanten document.domain is gezet; dat gaat niet op voor XHR. Eenzijdige relaxation is een security-risk en zolang de server niet kan aangeven dat een XHR request vanaf een (bepaald) subdomain ook OK is (daar wordt nog aan gewerkt - XDomainRequest met Access Control) is dit de enige logische implementatie.

De meeste gebruikte workaround is een XHR proxy opzetten op het subdomain, maar een alternatief zou kunnen zijn het gebruik van een (i)frame geladen vanaf het hoofddomain, waar je wel tussen je pagina en het iframe dmv het relaxen van de same origin policy door document.domain te gebruiken kan communiceren, en waar je vanuit het iframe de XHR requests kan doen naar je hoofddomain. YMMV per browser bij de laatste methode ;)

Intentionally left blank


Acties:
  • 0 Henk 'm!

  • Bosmonster
  • Registratie: Juni 2001
  • Laatst online: 22-09 16:31

Bosmonster

*zucht*

Wat je ook kunt doen is een eenvoudig PHP wrappertje bijvoorbeeld (of andere taal natuurlijk). Vanaf de server kun je het bestand inlezen en direct doorsteuren.

PHP:
1
2
3
<?php
    readfile ('http://www.anderedomein.nl/mijnbestandopanderedomein.xml');
?>


Ik gebruik dit zelf ook om externe RSS feeds in te kunnen lezen met AJAX (wat anders natuurlijk niet kan).

Acties:
  • 0 Henk 'm!

  • r0bert
  • Registratie: September 2001
  • Laatst online: 30-07 02:32
Ok ok :) Niet waar ik op gehoopt had dus, maar intussen al goede workarounds.

Ik zag ook stukken over 'UniversalBrowserRead' en 'Digital Code Signing'. Misschien ook nog interessant :)

Ik denk dat ik trouwens als oplossing maar een kleine migratie ga houden ;) En anders wordt het ergens op de server inderdaad een proxy - welke via mod_rewrite/apache kan - maar via code, denk ik, een stuk flexibeler is.

Erg bedankt! O-) Ben blij dat mijn script het dan eindelijk doet. Ging zelf schrijven om de hoeveelheid code te beperken - uiteindelijk is het nog een pakket geworden.. *zucht* ;)

Acties:
  • 0 Henk 'm!

  • Clay
  • Registratie: Oktober 1999
  • Laatst online: 20-08 09:22

Clay

cookie erbij?

je kan natuurlijk ook json (oid) binnenhalen door <script>s aan je <head> te appenden, zo werkt bv googlemaps ook met de GClientGeocoder.

Instagram | Flickr | "Let my music become battle cries" - Frédéric Chopin


Acties:
  • 0 Henk 'm!

Verwijderd

Clay schreef op maandag 11 augustus 2008 @ 22:11:
je kan natuurlijk ook json (oid) binnenhalen door <script>s aan je <head> te appenden, zo werkt bv googlemaps ook met de GClientGeocoder.
Kun je alleen geen POST doen. Ik gebruik nu zelf de iframe methode succesvol (omdat ik POST moest kunnen gebruiken) in een aantal projecten en dat stelt eigenlijk niet zoveel voor. De scripts appenden aan de head heeft ook als nadeel dat je een manier moet zien te vinden om erachter te komen wanneer de content volledig geladen is.

Acties:
  • 0 Henk 'm!

  • r0bert
  • Registratie: September 2001
  • Laatst online: 30-07 02:32
Even nog wat links voor fanatiekelingen:

Something about 'UniversalBrowserRead'
http://www.google.nl/sear...&btnG=Google+zoeken&meta=

Signed Scripts
http://www.mozilla.org/pr...nents/signed-scripts.html

Working with Proxy in mod_rewrite (Apache)
http://www.google.com/sea...n&q=mod_rewrite+proxy+xhr

Combining with hidden frames
http://www.google.com/search?hl=en&q=xhr+hidden+frame

Some kind of XHR-gateway programmed in a code you like
http://www.google.com/sea...=xhr+gateway+cross-domain

Cross-site XMLHttpRequest: W3 Acces Control (Firefox 3)
http://developer.mozilla....Cross-Site_XMLHttpRequest

Acties:
  • 0 Henk 'm!

  • r0bert
  • Registratie: September 2001
  • Laatst online: 30-07 02:32
Iemand enig idee waarom IE6 nog niet meewerkt (bij het klikken op de link gaat de browser niet naar de gecachede pagina, zou in de adresbalk moeten komen te staan)?

p.e.:
http://service.sove.nl/soaptest

Ik krijg geen foutmelding en het plaatsen van alerts heeft tot nu toe weinig opgelevert :(

[ Voor 31% gewijzigd door r0bert op 13-08-2008 16:11 ]

Pagina: 1