Ver índice de contenidos del libro

Capítulo 9. Seguridad

9.1. Autenticación básica

Si publicaras ahora tu aplicación Rails, cualquier persona podría añadir, editar y borrar artículos y comentarios. Obviamente Rails incluye algunas opciones de seguridad para evitar esto. Una de ellas es la autenticación basada en HTTP.

La clave consiste en proteger el acceso a varias de las acciones definidas en el controlador ArticlesController. Si el usuario no está autenticado, no podrá acceder a esas acciones. Para ello utilizaremos el método http_basic_authenticate_with de Rails.

La configuración de la autenticación en este caso consiste en indicar al principio del controlador ArticlesController que quereos proteger todas las acciones salvao index y show:

class ArticlesController < ApplicationController
 
  http_basic_authenticate_with name: "dhh", password: "secret", except: [:index, :show]
 
  def index
    @articles = Article.all
  end
 
  # ...

Otra restricción adicional consiste en evitar que los usuarios puedan borrar comentarios. Para ello, añade lo siguiente en CommentsController (archivo app/controllers/comments_controller.rb):

class CommentsController < ApplicationController
 
  http_basic_authenticate_with name: "dhh", password: "secret", only: :destroy
 
  def create
    @article = Article.find(params[:article_id])
    ...
  end
 
  # ...

Si ahora tratas de crear un nuevo artículo, verás la siguiente ventana en la que el navegador te solicita un usuario y contraseña.

Ventana de usuario y contraseña para la autenticación HTTP

Figura 9.1 Ventana de usuario y contraseña para la autenticación HTTP

Las aplicaciones Rails pueden utilizar obviamente otros métodos de autenticación alternativos. Dos de las alternativas más populares se llaman Devise y Authlogic.

9.2. Otros comentarios sobre la seguridad

La seguridad, sobre todo cuando habamos de aplicaciones web, es un tema muy complejo. Por eso puedes consultar la guía Ruby on Rails Security Guide para obtener más información al respecto.