Rails官方教程入门,ForbiddenAttributesError

时间:2014-09-22 00:35:50

标签: ruby-on-rails ruby strong-parameters

我已经按照教程信函进行了操作,但我仍然遇到禁用属性错误。我有rails 4.1.4和ruby 2.1.2。这是我的新文章的控制器方法

def create
    @article = Article.new(params[:article])

    if @article.save
      redirect_to @article
    else  
      render 'new'
    end
end
private

  def article_params
    params.require(:article).permit(:title, :text)
  end

我确定它只是一个单数/复数的错误输入或愚蠢的东西,但我现在已经在这一个愚蠢的错误超过一个小时了,所以任何帮助都会受到赞赏< / p>

1 个答案:

答案 0 :(得分:2)

在第一行中,您需要将params[:article]更改为article_params

Rails 4+拒绝初始化Active Model对象,除非传递给它的属性已明确列入白名单。这是一个称为strong parameters的Rails安全功能,用于更好地防范mass assignment - &#34;一个计算机漏洞,其中滥用Web应用程序中的活动记录模式来修改用户的数据项通常不应允许访问&#34;。

params[:article]是通过对create的POST请求传递给/articles操作的未经过清理的哈希。它可能包含以非预期和意外方式设置Article模型属性的数据。 Rails 4+通过抛出异常而不允许运行此类代码来帮助您,而不是仅仅依赖于您的安全责任。

article_params是对您的示例private中列出的ArticlesController方法的调用。请注意,它明确要求:article参数,并且只允许:title:text属性。这可以防止恶意用户创作一篇特别令人反感的文章,然后通过将该人:user_id和攻击性文章一起传递给一个无辜的个人姓名。

对于Rails中大规模分配漏洞的真实世界示例,这里有一个勘误表article总结了2012年的Github黑客攻击。