2010-08-03 6 views
1

Existe-t-il un langage Web permettant au client de créer des messages HTTP sur des sites externes.Client HTTP Publier sur des sites externes

Je sais que JavaScript le fait avec XMLHttpRequest, mais il n'autorise pas la publication inter-domaines, sauf si le domaine destinataire veut autoriser le domaine expéditeur. Je veux publier des données sur un site externe (que je ne contrôle pas) et faire authentifier la demande avec ce que le navigateur du client a déjà (cookies, etc.).

Est-ce possible? J'ai essayé cURL mais il semble faire un post HTTP de serveur, pas un poste HTTP client.


Edit:

Un peu plus aperçu de ce que je suis en train de faire:

Je suis en train de POST JSON sur le site en utilisant la session de l'utilisateur (je l'ai dit les cookies, mais je crois qu'ils sont des sessions PHP, que je suppose que je considère toujours les cookies).

Le site ne vérifie pas le renvoi (mauvaise sécurité # 1) je peux exécuter javascript et html sur la page Web en utilisant ma page d'accueil personnelle (faible sécurité # 2) Le code JSON fonctionne même si le type de contenu is form (mauvaise sécurité # 3) Il n'y a aucune vérification de sécurité du tout, juste une vérification de session PHP.

L'idée de forme est merveilleuse et cela fonctionne. Le probablement est encore que son JSON. Donc, après avoir envoyé des données postdata comme foo = {"test": "123", "test2": "456"} l'ensemble foo = partie le désordre. De plus les formes semblent tourner JSON en forme de codage, de sorte que son envoi:

foo =% 7B% 22 essai% 22% 3A +% 22 % 22% 2C +% 22 test2% 22 % 3A +% 22 % 22% 7D

lorsque j'en ai besoin pour envoyer;

{ "test": "123", "test2": "456"}

Donc, avec tout connu, est-il une meilleure chance d'envoyer JSON ou non?

+0

# 1 Je ne considère pas la vérification d'une sécurité référence mauvaise, c'est la même chose que demander: « Alors, où viens-tu Oh bien, entrez. Promettez-vous que votre nom n'est pas Mallory? Il n'y a pas de sécurité légitime derrière cela et quiconque utilise wget ou même les en-têtes HTTP live de firefox peut facilement l'usurper en sept secondes. # 3 peut également être changé en type de contenu = "Pâtes spaghetti magiques," et je pourrais les expédier ajax json plein de tableaux avec du bacon juteux en eux. Je ne considérerais donc pas cela comme une menace réelle pour la sécurité. # 2 est un problème cependant. – Incognito

Répondre

2

Je ne pense pas: vous n'obtiendrez pas les cookies auth de l'utilisateur sur le site tiers du côté serveur (à cause de la politique d'origine unique) et vous ne pouvez pas faire des requêtes Ajax à la tierce partie site. Le meilleur que vous pouvez faire est probablement créer un <form> (peut-être dans un), le pointer vers le site tiers, le remplir avec des données, et l'avoir soumis (ou soumettre automatiquement). Vous ne pourrez pas obtenir les résultats de la demande par programme (encore une fois en raison de la politique d'origine unique), mais peut-être que cela va faire - vous pouvez toujours montrer les résultats de la demande à l'utilisateur.

+0

@Pekka vous soulevez une pensée intéressante en ce moment que je n'ai jamais cessé de penser avant. Donc, je ne peux pas dans les coulisses soumettre un formulaire et récupérer les résultats au nom de l'utilisateur, disons ajax ajax. Mais ... si j'avais un iframe caché sur mon site qui lisait les cookies de la machine, posté un formulaire sur un site distant, grattait l'écran avec javascript pour des informations juteuses, puis postait un autre formulaire caché sur mon site qui enregistrait information qui serait ok. Suis-je en train de manquer quelque chose dans la sécurité que je suis en train de négliger? Ça ne peut pas être aussi simple que ça? – spinon

+0

@spinon Vous ne pouvez pas le faire pour n'importe quel site Web correctement programmé (ce que vous voulez faire est une contrefaçon de demande intersite). – Artefacto

+0

@spinon non, ce n'est pas possible parce que vous ne pouvez accéder à aucune partie du document en utilisant Javascript. Vous ne pouvez même pas aller chercher des pixels simples: http://stackoverflow.com/questions/1936021/javascript-eyedropper-tell-colour-of-pixel-under-mouse-cursor –

0

Je pense que pour des raisons évidentes, cela n'est pas autorisé. Si cela était autorisé, qu'est-ce qui empêcherait une personne mal intentionnée de publier des données de formulaire depuis le navigateur d'une personne vers un nombre quelconque de sites dans une fenêtre cachée d'iframe ou de fenêtre contextuelle?

S'il s'agit d'une conception de votre application, vous devez repenser ce que vous essayez d'accomplir.

EDIT: Comme @Pekka le soulignait, je sais que vous pouvez soumettre un formulaire à un site distant en utilisant des soumissions de formulaire types. Je parlais d'utiliser une solution ajax côté client. Désolé pour la confusion.

+0

Il n'est pas un problème pour publier des données de formulaire à partir du navigateur d'une personne à un site externe.Il est simplement impossible d'effectuer une requête Ajax complète et d'obtenir la réponse par programme. –

+0

@Pekka ouais c'est ce que j'essayais de dire pas aussi clairement. Lisez le commentaire que j'ai laissé sur le vôtre à propos de quelque chose auquel je n'avais jamais pensé auparavant. – spinon

0

Vous devez suivre la méthode OpenID et les autres systèmes de connexion unique. Comment openID fonctionne est votre site Web POSTs un certain jeton au service d'openID et en retour obtient le résultat d'authentification. Référence How Does it Work? section here

+0

Ne fonctionnera probablement pas car il ne contrôle pas le site externe dont il a besoin pour faire la demande. –

-1

Le client ne peut pas publier directement sur un site externe; c'est une violation des modèles de sécurité de base interdomaines. L'exception est l'accès au javascript avec JSONP. Ce que vous décrivez nécessiterait l'accès aux cookies d'un utilisateur pour un autre site Web, ce qui est impossible car le navigateur n'autorise que l'accès aux cookies dans le même domaine/chemin.

Vous devez utiliser un proxy côté serveur pour effectuer des requêtes inter-domaines, mais vous ne pouvez toujours pas accéder aux cookies externes: http://jquery-howto.blogspot.com/2009/04/cross-domain-ajax-querying-with-jquery.html

+1

Le proxy côté serveur ne sera pas vraiment utile non plus, car il y a des cookies d'authentification dans le navigateur du client, il semble avoir besoin d'utiliser pour l'opération. –

+0

J'ai dit que l'accès aux cookies est impossible, ce qui inclut les méthodes côté client + serveur. –

0

Oui, vous pouvez utiliser une bibliothèque flash spéciale qui prend en charge les appels inter-domaines: YUI connection manager

Ajouté: pas sûr de la question de l'authentification par cookie si ...

+0

Cela semble bien, mais je pense que Flash n'utilise pas les cookies du navigateur lors de la demande. Il pourrait être possible de les ajouter manuellement, cependant. –

+0

La clé ici sont les cookies. Si elles n'étaient pas nécessaires, il pourrait aussi bien configurer un proxy inverse dans son domaine. – Artefacto

Questions connexes