ACTUALIZACIÓN: GWT 2.3 presenta un mejor mecanismo para combatir ataques XSRF. Ver http://code.google.com/webtoolkit/doc/latest/DevGuideSecurityRpcXsrf.htmlGWT RPC: ¿hace lo suficiente para proteger contra CSRF?
mecanismo RPC GWT hace las siguientes cosas a todas las peticiones HTTP -
- conjuntos de dos cabeceras de petición Personal - X-GWT-permutación y X-GWT-módulo-Base
- Sets el tipo de contenido como text/x-gwt-rpc; charset = utf-8
La solicitud HTTP es siempre una POST, y en el lado del servidor, los métodos GET generan una excepción (método no admitido).
Además, si estos encabezados no están configurados o tienen un valor incorrecto, el servidor falla el procesamiento con una excepción "posiblemente CSRF?" O algo por el estilo.
La pregunta es: ¿Esto es suficiente para evitar el CSRF? ¿Hay alguna forma de establecer encabezados personalizados y cambiar el tipo de contenido en un método puro de falsificación de solicitudes entre sitios?
XmlHttpRequest, Flash y una serie de otras tecnologías pueden configurar encabezados de explorador personalizados, pero la política de origen mismo se activa y evitará que otro sitio realice la solicitud. A menos que el servidor tenga un crossdomain.xml indulgente o devuelva Access-Control-Allow-Origin a sitios web arbitrarios, ¿cómo va a funcionar la solicitud? Eso solo nos deja con forms/images/iframes y similares, donde no se aplica la misma política de origen. Pero no sé de qué manera pueden establecer encabezados http personalizados. Entonces, ¿cómo es vulnerable? –
.. y sí, estoy de acuerdo con que la protección csrf basada en token es la mejor manera, pero me gustaría entender el error con su enfoque. –
@sri Muy buena pregunta. Para poder aprovechar este exploit, debes aprovechar una propiedad poco conocida de flash. He publicado 2 exploits que hacen lo que estoy describiendo, te animo a que los uses. (Si no tiene el software vulnerable como mínimo, puede ver que la solicitud POST se está enviando a otro dominio, pero el script no puede "ver" una respuesta debido al SOP) – rook