Leer cookie de rails en aplicacion externa

Hola ,
Queria saber si es posible leer una cookie de rails desde una aplicacion
externa, especificamente desde una aplicacion merb.

con merb puedo leer el session.session_id de la cookie de rails , pero
no se
como leer la cookie para sacar los valores de la session , como un
session[:user_id] etc…

¿es posible hacer eso?

gracias

Atte.
Miguel Michelson Martinez

o bien , ¿es posible des-encriptar la cookie para leer su contenido en
otra
aplicacion?

Saludos

Atte.
Miguel Michelson Martinez

On Mon, Jun 23, 2008 at 4:45 PM, Miguel M. <

On Jun 23, 2008, at 6:22 PM, Miguel M. wrote:

o bien , ¿es posible des-encriptar la cookie para leer su contenido
en otra aplicacion?

No creo que pueda hacer esto pero lo que puedes hacer para hablar
entre los dos frameworks es utilizar la base de datos como manejador
de sesiones, teniendo el session_id podrías obtener la información
desde la BD.


Federico

Hola Federico , gracias por responder.

empecé con el almacenamiento de la session en la base de datos, pero el
campo session_id me lo deja encriptado, y el campo data es un campo
text
que tambien lo deja encriptado, mi idea es pasarle el session id por get
o
post a la otra aplicacion, pero aun asi me gustaría poder acceder a los
datos del campo data, especificamente el user_id

¿como puedo obtener los datos del data , se puede ?

gracias

Atte.
Miguel Michelson Martinez

On Mon, Jun 23, 2008 at 8:09 PM, Federico B.
[email protected]

Hola , ya encontré como se puede desencryptar la cookie en rails.

solo hay que pasar el session.session_id a este metodo

      Marshal.load(ActiveSupport::Base64.decode64(data))

ahora me queda como cargar esta librería en Merb :stuck_out_tongue:

Saludos

Atte.
Miguel Michelson Martinez

On Mon, Jun 23, 2008 at 8:16 PM, Miguel M. <

Cuidadito con lo que estás haciendo. Si ves el código de rails 2
(ahora está caido github), utiliza el método entero, no te quedes ahí.

De no hacerlo, estarás perdiendo la comprobación de identidad. Yo
cambio la sesión los datos para aparentar ser otro usuario y tan
pancho. Tienes que copiar la salt de rails a merb, para poder hacer la
comprobación de autenticidad.

Un Saludo.

a ha, para el que le interese

en merb,

config/init.rb

dependencies “actionpack”,“action_controller”

luego en application podemos hacer algo como esto

def decryptCookie(data)

      Marshal.load(ActiveSupport::Base64.decode64(data))

 end

y en la accion…

def index

@sessionData = decryptCookie(cookies[:_artenlinea_2008_session])

render

end

Saludos

Atte.
Miguel Michelson Martinez

www.artenlinea.cl

2008/6/23 Miguel M. [email protected]:

Hola Guillermo,

te refieres a este metodo?

def unmarshal(cookie)
if cookie
data, digest = CGI.unescape(cookie).split(‘–’)
unless digest == generate_digest(data)
delete
raise TamperedWithCookie
end
Marshal.load(ActiveSupport::Base64.decode64(data))
end
end

Saludos

Atte.
Miguel Michelson Martinez

www.artenlinea.cl

2008/6/24 Guillermo [email protected]:

2008/6/24 Miguel M. [email protected]:

    unless digest == generate_digest(data)
      delete
      raise TamperedWithCookie
    end

    Marshal.load(ActiveSupport::Base64.decode64(data))
  end
end

Exacto y a:

def generate_digest(data)
key = @secret.respond_to?(:call) ? @secret.call(@session) : @secret
OpenSSL::HMAC.hexdigest(OpenSSL::Digest::Digest.new(@digest), key,
data)
end

Y si añades este otro:
def marshal(session)
data = ActiveSupport::Base64.encode64(Marshal.dump(session)).chop
“#{data}–#{generate_digest(data)}”
end

Ya las tienes en los dos sentidos.
(

)

Lo que me llama la atención, es que por lo que veo, y salvo que me
pierda, la cookie, no es encriptada, si no que simplemente firmada.

Vamos, que aunque no sirva de nada para nuestra aplicación si yo
guardo en la sesión el número de serie de mi cuenta del banco
cualquiera puede ver la cookie.

Otra cosa es que por debajo se encripten las cookies, cosa que no me
estrañaría tampoco. Esta noche investigaré un poco más.

2008/6/24 Guillermo [email protected]:

Vamos, que aunque no sirva de nada para nuestra aplicación si yo
guardo en la sesión el número de serie de mi cuenta del banco
cualquiera puede ver la cookie.

Es correcto, solo se codifica pero la cookie va en claro y tiene
mecanismo para detectar que se haya modificado. Por ello se advierte
que no vaya informacion sensible. Esto liga a su vez con mejores
practicas web, donde en sesion se pone por lo general poco mas que un
user_id y un mensaje flash.