2008-10-02 12 views
3

Je suis en train de mettre en place un petit outil que certains professionnels peuvent utiliser sur leurs systèmes de fichiers locaux, car nous ne voulons pas configurer d'hôte pour cela. Fondamentalement, il suffit de HTML + Javascript (en utilisant jQuery) pour tirer quelques rapports en utilisant REST à partir d'un 3ème parti.Application HTML/Javascript qui s'exécute sur le système de fichiers, problème de sécurité

Le problème est, FF3 et IE ne permettent pas l'appel ajax, je reçois:

Access to restricted URI denied" code: "1012 

Il est évident que le problème XSS ... Comment puis-je travailler autour d'elle? Les données renvoyées sont au format XML.

je tentais de le faire de cette façon:

$.get(productUrl, function (data){ 
    alert (data); 
}); 

EDIT: Pour être clair ... Je ne suis pas la mise en place d'un hôte interne pour cette (façon de lourdeurs administratives), et nous NE POUVONS PAS l'héberger de manière externe en raison des données récupérées.

EDIT # 2: Un petit test montre que je peux utiliser un IFRAME pour faire la demande. Est-ce que quelqu'un sait s'il y a des inconvénients à utiliser un IFRAME caché?

+0

Comment l'iframe fonctionnerait-il? – Greg

Répondre

2

Dans une situation similaire, ma solution consistait à utiliser Mark Of The Web, qui est un commentaire HTML spécial reconnu par IE. Il place la page dans une zone de sécurité différente.

Référence: MSDN

+0

"... en activant Internet Explorer pour forcer l'exécution des pages Web dans la zone de sécurité de l'emplacement d'origine de la page, à condition que cette zone de sécurité soit plus restrictive que la zone Machine locale" Cela ne fonctionne-t-il pas? – Greg

+0

Bon point.Je suis un peu confus quant à la zone qui est plus ou moins "restrictive", puisque l'ajout du MOTW permettra à votre code de fonctionner, cela ne le rendrait-il pas moins restrictif? Cela dépend de la façon dont vous le regardez. –

+0

Par "plus restrictif", ils signifient qu'il ne peut pas charger à partir du système de fichiers local en tant que tel. –

-1

Si vous avez installé Python, un serveur Web pour servir des fichiers peut être aussi simple que

python -c “import SimpleHTTPServer;SimpleHTTPServer.test()” 

Edit: Affiche originale ne peut pas utiliser cette approche, mais en général, je pense que c'est la façon de résoudre ce problème particulier pour les futurs utilisateurs de ce problème.

+0

Nous avons une politique sans serveur sur les postes de travail ... et c'est pour protéger les utilisateurs d'eux-mêmes. – FlySwat

-1

-vous contrôler le serveur fournissant les données? Si c'est le cas, vous pouvez configurer un rappel. L'idée de base est que vous avez une fonction dans le script qui gère les données entrantes (dans votre cas, une chaîne XML). Ensuite, le serveur répond à la demande avec un extrait JavaScript de votre fonction de rappel avec la chaîne comme argument. Et au lieu d'utiliser AJAX, vous ajoutez une nouvelle balise de script à la page. C'est la base de JSONP. Ça ressemble à quelque chose comme ça.

page locale.

<script> 
    function callback(str) { 
     alert(str); 
    } 
    function makeRequest(param) { 
     var s = document.createElement('script'); 
     s.src = 'http://serveranywhere/script.bla?' + params; 
     document.getElementsByTagName[0].appendChild(s); 
    } 
</script> 

serveur distant retourne

callback('<xml><that><does><something></something></does></that></xml>'); 

maintenant lorsque le script est ajouté à la page, le rappel de la fonction vous sera exécutée la chaîne que vous fournissez. Et jQuery call fait tout cela pour vous en utilisant JSONP dans l'appel $ .ajax. J'espère que cela t'aides.

Questions connexes