Comprobando si el usuario actual existe antes de ejecutar el código

1

En uno de mis controladores tengo este método:

  def method_name
    if current_user
      @model = Model.find(params[:id])
      if @model.destroy
        flash.alert = 'Model deleted successfully'
        redirect_to models_path
      end
    end
  end

Verifico si hay un current_user asignado por el dispositivo antes de permitir que se elimine el @model. ¿Es esto seguro y suficiente en términos de seguridad?

Lo que realmente hago es verificar si existe current_user. Entonces, ¿hay alguna manera de que alguien pueda "engañar" al sistema que existe current_user y, como resultado, poder activar los comandos incluidos en el método?

    
pregunta Stefanos.Ioannou 13.05.2014 - 16:35
fuente

1 respuesta

1

No estoy seguro de su aplicación, pero lo que parece faltar es que el usuario tiene algún tipo de control sobre el modelo (es decir, la capacidad de borrarlo).

Si su aplicación permite que se creen usuarios sin ninguna intervención / aprobación, cualquiera podría crear un nuevo usuario (y, por lo tanto, tener un válido current_user), y eliminar todos los objetos simplemente iterando a través de todos sus valores de identificación:

  • / url / 1
  • / url / 2
  • ...

Nuevamente, no estoy seguro de lo que hace tu aplicación, pero es posible que desees poner algo como:

if current_user
  @model = current_user.models.find(params[:id])
  if @model.destroy
    flash.alert = 'Model deleted successfully'
    redirect_to models_path
  end
end

Esto solo permitirá que un usuario elimine sus propios objetos, no todos los objetos del sistema.

    
respondido por el ndrix 14.05.2014 - 06:24
fuente

Lea otras preguntas en las etiquetas