web-dev-qa-db-fra.com

POST de formulaire entre domaines

J'ai vu des articles et des publications partout (y compris SO) sur ce sujet, et le commentaire dominant est que la politique de même origine empêche un formulaire POST entre domaines. Le seul endroit où j'ai vu quelqu'un suggérer que la politique de même origine ne s'applique pas aux publications de formulaires, est ici .

J'aimerais avoir une réponse d'une source plus "officielle" ou formelle. Par exemple, quelqu'un connaît-il la RFC qui explique comment même-Origin affecte ou non un formulaire POST?

clarification : Je ne demande pas si un objet GET ou POST peut être construit et envoyé à un domaine quelconque. Je demande:

  1. si Chrome, IE ou Firefox autorisera le contenu du domaine 'Y' à envoyer un POST au domaine 'X'
  2. si le serveur recevant le POST verra en réalité des valeurs de formulaire. Je dis cela parce que la majorité des testeurs de discussion en ligne ont déclaré que le serveur avait reçu la publication, mais que les valeurs du formulaire étaient toutes vides/supprimées.
  3. Quel document officiel (RFC, par exemple) explique le comportement attendu (indépendamment de ce que les navigateurs ont actuellement mis en œuvre).

Incidemment, si la même origine n’affecte pas les formes POST, cela rend un peu plus évident pourquoi des jetons anti-contrefaçon sont nécessaires. Je dis "un peu" car il semble trop facile de croire qu'un attaquant pourrait simplement émettre un HTTP GET pour récupérer un formulaire contenant le jeton anti-falsification, puis créer un POST illicite contenant ce même jeton. Commentaires?

130
Brent Arias

La même politique d'origine s'applique uniquement aux langages de programmation côté navigateur. Donc, si vous essayez de publier sur un serveur différent du serveur d’origine en utilisant JavaScript, la même règle d’origine entre en jeu, mais si vous publiez directement à partir du formulaire, c’est-à-dire que l’action pointe vers un autre serveur, tel que:

<form action="http://someotherserver.com">

et qu’il n’y ait pas de javascript impliqué dans la publication du formulaire, la même règle d’origine n’est pas applicable.

Voir wikipedia pour plus d'informations

157
Suresh Kumar

Il est possible de créer une requête GET ou POST arbitraire et de l'envoyer à à tout serveur accessible au navigateur victime. Cela inclut les périphériques de votre réseau local, tels que les imprimantes et les routeurs.

Il existe de nombreuses façons de construire un exploit CSRF. ne attaque CSRF basée sur POST simple peut être envoyée à l'aide de la méthode .submit(). Des attaques plus complexes, telles que attaques de téléchargement de fichiers CSRF entre sites vont exploiter tilisation par CORS du comportement xhr.withCredentals .

CSRF ne viole pas le politique de même origine pour JavaScrip t car le SOP est concerné par JavaScript lecture la réponse du serveur à une demande client. Les attaques CSRF ne s'intéressent pas à la réponse, mais à un effet secondaire ou à un changement d'état généré par la demande, tel que l'ajout d'un utilisateur administratif. ou l'exécution de code arbitraire sur le serveur.

Assurez-vous que vos demandes sont protégées en utilisant l’une des méthodes décrites dans le aide-mémoire de prévention OWASP CSRF . Pour plus d'informations sur CSRF, consultez la page page OWASP sur CSRF .

40
Mikey

La politique de même origine n'a rien à voir avec l'envoi d'une demande à une autre URL (protocole, domaine ou port différent).

Il s’agit de restreindre l’accès à (la lecture) des données de réponse à partir d’une autre URL. Ainsi, le code JavaScript d'une page peut être envoyé à un domaine quelconque ou soumettre des formulaires de cette page n'importe où (sauf si le formulaire se trouve dans un iframe avec une URL différente).

Mais ce qui rend ces requêtes POST inefficaces, c'est que ces requêtes manquent de jetons antiforgery, elles sont donc ignorées par les autres URL. De plus, si JavaScript essaie d’obtenir ces jetons de sécurité en envoyant une requête AJAX à l’URL de la victime, il n’est pas possible d’accéder à ces données avec la stratégie Même origine.

Un bon exemple: ici

Et une bonne documentation de Mozilla: ici

14
Mohsenme