MISE À JOUR: GWT 2.3 introduit un meilleur mécanisme pour lutter contre les attaques XSRF. Voir http://code.google.com/webtoolkit/doc/latest/DevGuideSecurityRpcXsrf.htmlGWT RPC - Fait-il assez pour protéger contre CSRF?
mécanisme RPC de GWT fait les choses suivantes sur chaque requête HTTP -
- Définit deux têtes de requête personnalisée - X-GWT-Permutation et X-GWT-module de base
- Ensembles le type de contenu en tant que text/x-gwt-rpc; charset = utf-8
La requête HTTP est toujours un POST, et les méthodes GET côté serveur lancent une exception (méthode non prise en charge).
En outre, si ces en-têtes ne sont pas définis ou ont la valeur incorrecte, le serveur échoue le traitement avec une exception "éventuellement CSRF?" Ou quelque chose à cet effet. Question: Est-ce suffisant pour prévenir CSRF? Existe-t-il un moyen de définir des en-têtes personnalisés et de modifier le type de contenu dans une méthode de contrefaçon de demande inter-site pure?
XmlHttpRequest, Flash et une foule d'autres technologies peuvent définir des en-têtes de navigateur personnalisés - mais la même règle d'origine intervient et empêchera un autre site de faire la demande. À moins que le serveur ne dispose d'un fichier crossdomain.xml clément, ou renvoie Access-Control-Allow-Origin à des sites Web arbitraires, comment la requête va-t-elle fonctionner? Cela ne nous laisse que des formes/images/iframes et autres, où la politique d'origine identique ne s'applique pas. Mais je ne sais pas d'une façon dont ils peuvent définir des en-têtes http personnalisés. Alors, comment est-ce vulnérable? –
.. et oui, je suis d'accord token basé protection csrf est le meilleur moyen, mais je voudrais comprendre le défaut de leur approche. –
@sri Très bonne question. Afin de réussir cet exploit, vous devez profiter d'une propriété peu connue du flash. J'ai posté 2 exploits qui font ce que je décris, je vous encourage à les utiliser. (Si vous n'avez pas le logiciel vulnérable à tout le moins, vous pouvez voir que la demande POST est envoyée à un autre domaine, mais le script ne peut pas "voir" une réponse en raison de la SOP) – rook