Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 在筛选新操作和创建操作之前?_Ruby On Rails_Ruby_Ruby On Rails 4 - Fatal编程技术网

Ruby on rails 在筛选新操作和创建操作之前?

Ruby on rails 在筛选新操作和创建操作之前?,ruby-on-rails,ruby,ruby-on-rails-4,Ruby On Rails,Ruby,Ruby On Rails 4,我有一个关于Rails的与安全相关的一般性问题 假设我有一个这样的控制器: def ProjectsController before_action :user_has_paid, :only => [ :new, :create ] ... def new @project = Project.new end def create @project = current_user.projects.build(project_params)

我有一个关于Rails的与安全相关的一般性问题

假设我有一个这样的控制器:

def ProjectsController

  before_action :user_has_paid, :only => [ :new, :create ]  

  ...

  def new
    @project = Project.new
  end

  def create
    @project = current_user.projects.build(project_params)
    if @project.save
      flash[:success] = "Project saved."
      redirect_to projects_path
    else
      render :new
    end
  end

  ...

  private

    def user_has_paid
      if current_user.has_not_paid?
        flash[:notice] = "You must pay first."
        redirect_to payments_path
      end
    end

end
从安全角度来看:在
新建
创建
操作之前,我是否需要


为了保存几个SQL查询,我只想在
new
操作中使用它,但我想知道这是否是save,或者恶意用户是否能够绕过
new
操作并创建一个项目,而不必先付费


感谢您的建议。

从安全角度来看,您肯定希望在创建操作上先执行
,然后再执行
(否则恶意用户可能会通过用户curl或类似方式绕过支付)。至于你是否有新的行动将取决于所需的用户体验-你想让用户尝试请求立即重定向“新”视图(即,他们甚至不能看到视图,除非他们已经支付),还是你想让用户看到该视图(可能只是在提交到创建操作之前提供一条关于需要付款的警告消息)


从性能的角度来看,除非对当前用户的调用是特别密集的,否则我不会担心额外的查询。

我建议对
新的
创建
操作都使用
操作前的
创建项目的请求将不会被接受。因此,据我所知,检查这两个操作将是安全的好选择,不会留下任何安全漏洞供进一步开发。

“保存两个SQL查询”-你能再解释一下吗?非常感谢。我扔了一枚硬币,然后把neuronaut的答案标记为正确答案。