¿Cuáles son algunas técnicas viables para combinar la protección CSRF con las API RESTful?

StackOverflow https://stackoverflow.com/questions/2267637

Pregunta

Me interesa saber qué enfoques han adoptado las personas al crear una API RESTful (o cuasi-RESTful) para sus aplicaciones web.

Un ejemplo práctico:

Supongamos que tiene una aplicación web tradicional basada en navegador que utiliza protección CSRF en todos los formularios.En cada formulario presentado en el navegador se incluye una entrada oculta con un token de protección CSRF.Al enviar el formulario, si esta entrada no coincide con la versión del token del lado del servidor, el formulario se considera no válido.

Ahora digamos que desea exponer la aplicación web como una API (quizás usando JSON en lugar de HTML).Tradicionalmente, al publicar una API, he considerado que las transacciones son unilaterales (lo que significa que el consumidor de la API crea la solicitud basándose en la API publicada en lugar de solicitar primero un formulario y luego crear una solicitud utilizando el formulario devuelto).

El enfoque "unilateral" fracasa cuando se tienen en cuenta elementos como la protección CSRF.El token de protección CSRF debe incluirse en cualquier POSTS/PUTS/DELETES enviado por el consumidor de API.

He estado tratando de pensar en la mejor manera de abordar esto.Solicitar un formulario cada vez que es necesario realizar una llamada API parece muy incómodo (especialmente cuando se trata de operaciones asincrónicas), pero todas las demás alternativas que he pensado por mi cuenta parecen anular la protección CSRF (o al menos perforarla ), lo cual es inaceptable.

¿Alguno de ustedes tiene idea de esto?

Gracias.

(No es que deba importar demasiado, ya que el problema es conceptual y independiente de la plataforma, pero estoy tratando con una pila LAMP tradicional y uso Symfony 1.4 como marco de mi aplicación.Mi objetivo es publicar una API web en formato JSON que permita a los desarrolladores crear aplicaciones móviles/de escritorio que funcionen bien con una aplicación web existente).

¿Fue útil?

Solución

resto va muy bien con la autenticación (es decir, la autenticación básica), a fin de tratar el uso de nombre de usuario de su sitio de usuario y una contraseña específica para una aplicación con destino a ese usuario - técnica a veces se llaman claves de la API. Algo que API de FriendFeed está haciendo consulte la documentación .

Pocas notas difíciles:

  • utilizar la autenticación implícita o SSL
  • teniendo por aplicación de clave de API puede ser un poco de una sobrecarga, por lo que la mayoría de los sitios tienen clave de API única para todas las aplicaciones 3 ª parte
  • OAuth podría ser vale la pena mirar
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top