Estoy construyendo un servicio web que utiliza exclusivamente JSON para su contenido de solicitud y respuesta (es decir, sin cargas útiles codificadas en forma).
¿Es un servicio web vulnerable al ataque CSRF si se cumple lo siguiente?
Cualquier
POSTsolicitud sin un objeto JSON de nivel superior, por ejemplo,{"foo":"bar"}será rechazada con un 400. Por ejemplo, unaPOSTsolicitud con el contenido42sería rechazada.Cualquier
POSTsolicitud con un tipo de contenido diferente aapplication/jsonse rechazará con un 400. Por ejemplo, unaPOSTsolicitud con un tipo de contenidoapplication/x-www-form-urlencodedse rechazará.Todas las solicitudes GET serán seguras y, por lo tanto, no modificarán ningún dato del lado del servidor.
Los clientes se autentican a través de una cookie de sesión, que el servicio web les proporciona después de proporcionar un par de nombre de usuario / contraseña correcto a través de un POST con datos JSON, por ejemplo
{"username":"user@example.com", "password":"my password"}.
Pregunta auxiliar: ¿Son PUTy las DELETEsolicitudes alguna vez vulnerables al CSRF? Lo pregunto porque parece que la mayoría (¿todos?) Los navegadores no permiten estos métodos en formularios HTML.
EDITAR: elemento agregado # 4.
EDITAR: Muchos buenos comentarios y respuestas hasta ahora, pero nadie ha ofrecido un ataque CSRF específico al que este servicio web sea vulnerable.