安全性 - 在执行代码之前检查当前用户是否存在

时间:2014-05-13 14:32:04

标签: ruby-on-rails security

在我的一个控制器中,我有这种方法:

  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

我检查是否有设备指定的current_user,然后才能删除@model。这在安全性方面是否安全且充足?

我真正做的只是检查current_user是否存在。那么有没有人可以"欺骗" current_user确实存在的系统,因此能够触发方法中包含的命令吗?

1 个答案:

答案 0 :(得分:1)

您将获得一系列答案。但是如果您希望用户登录,那么只需在控制器顶部执行此操作:

before_filter :authenticate_user!

这是由设计提供的,并确保在允许任何控制器操作之前有登录用户。

如果你有简单的授权,那么很可能,尽管你要确保用户有权删除该对象。你可以用几种方法做到这一点。我最喜欢的是Pundit宝石。

您还可以检查用户是否拥有该对象,以便能够将其删除。该代码看起来像这样

@model = Model.find(params[:id)
if current_user.id == @model.user_id
  # Rest of your destroy code
end