Saltar al contenido

Rails: no se puede verificar la autenticidad del token CSRF al realizar una solicitud POST

Te recomendamos que revises esta solución en un ambiente controlado antes de pasarlo a producción, saludos.

Solución:

Falsificación de solicitud entre sitios (CSRF/XSRF) es cuando una página web maliciosa engaña a los usuarios para que realicen una solicitud que no está prevista, por ejemplo, mediante el uso de bookmarklets, iframes o simplemente creando una página que es visualmente lo suficientemente similar como para engañar a los usuarios.

La protección Rails CSRF está hecha para aplicaciones web “clásicas”: simplemente brinda un grado de seguridad de que la solicitud se originó en su propia aplicación web. Un token CSRF funciona como un secreto que solo su servidor conoce: Rails genera un token aleatorio y lo almacena en la sesión. Sus formularios envían el token a través de una entrada oculta y Rails verifica que cualquier solicitud que no sea GET incluya un token que coincida con lo que está almacenado en la sesión.

Sin embargo, una API suele ser, por definición, un sitio cruzado y está destinada a ser utilizada en más de su aplicación web, lo que significa que todo el concepto de CSRF no se aplica del todo.

En su lugar, debe usar una estrategia basada en token para autenticar las solicitudes de API con una API key y secreto ya que está verificando que la solicitud proviene de un cliente API aprobado, no de su propia aplicación.

Puede desactivar CSRF como lo indica @dcestari:

class ApiController < ActionController::Base
  protect_from_forgery with: :null_session
end

Actualizado. En Rails 5 puede generar aplicaciones solo API usando el --api opción:

rails new appname --api

No incluyen el middleware CSRF y muchos otros componentes que son superfluos.

  • http://guides.rubyonrails.org/security.html#cross-site-request-forgery-csrf
  • https://labs.kollegorna.se/blog/2015/04/build-an-api-now/
  • ADVERTENCIA: no se pueden verificar los rieles de autenticidad del token CSRF

Otra forma de desactivar CSRF que no generará un null sesión es agregar:

skip_before_action :verify_authenticity_token

en su controlador Rails. Esto asegurará que aún tenga acceso a la información de la sesión.

Nuevamente, asegúrese de hacer esto solo en los controladores API o en otros lugares donde la protección CSRF no se aplica del todo.

Hay información relevante sobre una configuración de CSRF con respecto a los controladores API en api.rubyonrails.org:

Es importante recordar que las solicitudes XML o JSON también se ven afectadas y si está creando una API, debe cambiar el método de protección contra falsificaciones en ApplicationController (por defecto: :exception):

class ApplicationController < ActionController::Base
  protect_from_forgery unless: ->  request.format.json? 
end

Es posible que queramos deshabilitar la protección CSRF para las API, ya que normalmente están diseñadas para no tener estado. Es decir, el cliente API de solicitud manejará la sesión por usted en lugar de Rails.

Tienes la opción de amparar nuestra publicación escribiendo un comentario y valorándolo te estamos eternamente agradecidos.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *