ruby-on-rails ios ruby-on-rails-3 restkit

ruby on rails - Rails muestra "ADVERTENCIA: no se puede verificar la autenticidad del token CSRF" desde un POST de RestKit



ruby-on-rails ios (1)

Puede eliminar las advertencias de forma segura con lo siguiente:

skip_before_filter :verify_authenticity_token

Esto debe ir a cada controlador de la API de Rails que tengas, o si tienes un base_controller para todos los controladores de la API y luego ponerlo allí.

Si también puede acceder a su aplicación a través de un navegador web, no coloque esta línea en el application_controller la application_controller ya que creará una vulnerabilidad de seguridad.

Es seguro eliminar csrf para llamadas a la API, ya que la vulnerabilidad particular solo se puede ejecutar a través de un navegador web.

Actualización 16 de diciembre de 2013

He visto algunos enlaces a esta respuesta y algunos otros contenidos que sugieren una aclaración. Una API puede ser vulnerable a CSRF si utiliza métodos de autenticación basados ​​en la web para autenticar la API, por ejemplo, sesiones o cookies.

Hay algunos buenos detalles en ¿Es su API web susceptible a un exploit CSRF? .

Mi consejo sigue siendo para los usuarios de RestKit, ya que es poco probable que las credenciales de los usuarios se basen en sesiones o cookies, sino en nombres de usuario o claves de API.

Si su API puede autenticarse con sesión o cookies, debe evitar omitir : verify_authenticity_token y debe pensar en pasar a la autenticación basada en la clave de la API.

Si su API puede ser autenticada con un nombre de usuario y contraseña que también se usa para autenticarse en la web, aún existe un exploit potencial, aunque es menos grave ya que requeriría que el usuario ingrese su nombre de usuario y contraseña en su sitio en el sitio. Cuadro de autenticación HTTP Auth al visitar el sitio con el exploit. De nuevo, para la mejor seguridad, debe pensar en pasar a la autenticación basada en la clave de la API.

Vale la pena señalar que no estoy de acuerdo en que debes agregar :only => [:your_method] para protección adicional, siempre que tengas controladores api aislados, tu API no se mezcle con tus respuestas web y no estés usando session o galletas. Si están en su lugar, puede agregar sin problemas el skip_before_filter en un base_controller para su API.

Cuando intento RestKit POST desde RestKit , aparece una advertencia en la consola de Rails:

Started POST "/friends" for 127.0.0.1 at 2012-04-16 09:58:10 +0800 Processing by FriendsController#create as */* Parameters: {"friend"=>{"myself_id"=>"m001", "friend_id"=>"f001"}} WARNING: Can''t verify CSRF token authenticity (0.1ms) BEGIN SQL (1.7ms) INSERT INTO `friends` (`friend_id`, `myself_id`) VALUES (''f001'', ''m001'') (1.1ms) COMMIT Redirected to http://127.0.0.1:3000/friends/8 Completed 302 Found in 6ms (ActiveRecord: 3.0ms)

Aquí está el código del cliente:

NSMutableDictionary *attributes = [[NSMutableDictionary alloc] init]; [attributes setObject: @"f001" forKey: @"friend_id"]; [attributes setObject: @"m001" forKey: @"myself_id"]; NSMutableDictionary *params = [NSMutableDictionary dictionaryWithObject:attributes forKey:@"friend"]; [[RKClient sharedClient] post:@"/friends" params:params delegate:self];

¿Cómo puedo deshacerme de la advertencia?