【问题标题】:Getting Started with Rails official Tutorial, ForbiddenAttributesErrorRails 官方教程入门,ForbiddenAttributesError
【发布时间】:2014-11-15 21:34:55
【问题描述】:

我已按照教程信函进行信函操作,但仍然收到禁止属性错误。我有 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

我确定这只是我打错了一个单数/复数的东西或一些愚蠢的东西,但我已经犯了这个愚蠢的错误一个多小时了,所以感谢任何帮助

【问题讨论】:

  • 在第一行,你需要把params[:article]改成article_params
  • 非常感谢!我需要让他们知道,以便他们可以在教程中解决这个问题。将此作为答案,我将其标记为如此

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


【解决方案1】:

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

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

params[:article] 是通过对/articles 的 POST 请求传递给create 操作的未经处理的哈希。它可能包含以意想不到的方式设置Article 模型属性的数据。 Rails 4+ 通过抛出异常并不允许此类代码运行来帮您一个忙,而不是让您独自承担安全责任。

article_params 是对示例ArticlesController 中列出的private 方法的调用。请注意,它明确需要 :article 参数并且只允许 :title:text 属性。这可以防止恶意用户撰写特别冒犯性的文章,然后通过传递该人的:user_id 以及冒犯性文章来以无辜个人的名义发布该文章。

对于 Rails 中的批量分配漏洞利用的真实示例,这里是 Errata Security article 总结了 2012 年的 Github hack。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-11-29
    • 1970-01-01
    • 1970-01-01
    • 2016-06-24
    • 1970-01-01
    • 2017-03-21
    • 1970-01-01
    相关资源
    最近更新 更多