ruby on rails - tutorial - ¿Cómo asegurar una aplicación Rails contra Firesheep?
rails session variable (2)
Al ver que esta publicación SO SO ocupa un lugar bastante alto en Google, pensé en compartir el enfoque que usé para asegurar una aplicación.
Si desea garantizar SSL y también asegurar las cookies seguras, puede utilizar un middleware de Rack:
https://github.com/tobmatth/rack-ssl-enforcer
Evalué muchas opciones y ajustes de configuración diferentes para hacer esto, pero el middleware de rack me pareció la mejor opción con la menor cantidad de configuración: muy fácil de implementar. Tiene algunas excelentes opciones de configuración para filtrar reglas específicas, hosts, rutas, etc.
He probado que sí establece correctamente las cookies seguras y lo hace. Lo único que noté fue que solo lo hizo al cerrar sesión y volver a iniciar sesión, pero eso era usar Devise.
No he podido encontrar una guía fácil para asegurar una aplicación Ruby on Rails contra un Firesheep .
En caso de que no lo sepa, Firesheep descarta cookies de sesión si su aplicación no fuerza SSL y establece el indicador de seguridad en la cookie. Tuve que hacer una búsqueda para encontrar estas dos cosas, así que pensé en publicar lo que encontré aquí y ver si hay algo más que me esté perdiendo.
Paso 1 Forzar SSL
Hay dos formas de hacer esto que encontré. Una es usar el complemento ssl_requirement , pero esto es un problema porque debe especificar específicamente ssl_required :action1, :action2
en cada controlador.
La forma preferible parece ser mediante Rack Middleware, a través de este post: Forzar SSL usando ssl_requirement en la aplicación Rails 2 . Funciona de maravilla.
Paso 2 Hacer las cookies seguras
Para esto, seguí estas instrucciones , que le indican que coloque lo siguiente en su archivo config/environment/production.rb
:
config.action_controller.session = {
:key => ''name_of_session_goes_here'',
:secret => ''you need to fill in a fairly long secret here and obviously do not copy paste this one'',
:expire_after => 14 * 24 * 3600, #I keep folks logged in for two weeks
:secure => true #The session will now not be sent or received on HTTP requests.
}
Todo esto fue bastante sencillo en mi aplicación Rails 2.x. ¿Yo me perdí algo? ¿Es diferente para Rails 3?
Se ve muy bien para mí. Es bastante similar en Rails 3, aunque de forma predeterminada, la configuración de la sesión se almacena en config / initializers / session_store.rb. Usualmente pellizco el mío para que se parezca a ...
MyApp::Application.config.session_store :cookie_store, :key => ''_my_app_session'',
:secure => Rails.env == ''production'', # Only send cookie over SSL when in production mode
:httponly => true, # Don''t allow Javascript to access the cookie (mitigates cookie-based XSS exploits)
:expire_after => 60.minutes
Y el secreto se guarda en config / initializers / secret_token.rb:
MyApp::Application.config.secret_token = ''secret secrets are no fun...''
Si tiene acceso a su configuración de Apache (o lo que sea), también puede forzar el uso de SSL en ese nivel. Me parece un lugar más apropiado para hacerlo, pero creo que no todos tienen esa opción.