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
POST
solicitud sin un objeto JSON de nivel superior, por ejemplo,{"foo":"bar"}
será rechazada con un 400. Por ejemplo, unaPOST
solicitud con el contenido42
sería rechazada.Cualquier
POST
solicitud con un tipo de contenido diferente aapplication/json
se rechazará con un 400. Por ejemplo, unaPOST
solicitud con un tipo de contenidoapplication/x-www-form-urlencoded
se 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 PUT
y las DELETE
solicitudes 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.