ruby-on-rails - 清理输入

标签 ruby-on-rails parameters sanitize

这可能是一个真正的问题,但是如果您的参数列表包含一堆不可访问的属性的内容,即

params = {"controller"=>"api1/users", "action"=>"create"}

“清理”参数以便它们仅包含可访问的属性的最佳方法是什么。我目前想到的当前方法是:

User._accessible_attributes[:default].entries

这给了我一个可访问属性的列表,然后只传递这些参数:

["", "email", "password", "fb_token", "fb_id", "fb_name", "first_name", "last_name", "gender"

另一种可能的方法是:

  def clean_params #ANTIPATTERN
    params.delete(:controller)
    params.delete(:action)
  end

但这也感觉像是一种反模式......

我知道您应该执行 params[:user] 之类的操作来仅获取可访问的参数,但因为这是一个 API,所以能够仅在 url 中传递内容会很好。

谢谢!

最佳答案

Rails 参数包装器会自动为您执行此操作。也就是说,为了方便起见,它将接受顶层参数并将它们分组,例如 :user ,过滤掉 User 模型无法访问的任何参数。它在内部使用 accessible_attributes,与您所做的类似。使用您的 API 的人不需要对属性进行分组——rails 会在将参数传递给您的 Controller 操作之前完成此操作。

默认情况下,它针对 JSON 请求启用,但您可以通过编辑 initializers/wrap_parameters.rb 来扩展它。或者您可以使用 wrap_parameters method 在每个 Controller 的基础上调整行为在你的 Controller 中。

参数清理的 rails 方案可能会在 4.0 中发生变化,趋势是远离模型而转向 Controller 。您可能想观看 strong_parameters gem 的开发这可能是 future 事情的预演。

关于ruby-on-rails - 清理输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11043095/

相关文章:

php/mysql 排序问题和表单清理?

php - bcrypt 和清理密码?

ruby-on-rails - 如何修复正则表达式中的无效多字节字符?

c - 使用枚举作为参数的奇怪编译行为

ruby-on-rails - Rails/Bootstrap/HAML - 如何将此代码转换为 HAML 显示 Flash 消息?

javascript - 将值传递给函数参数 javascript 时遇到问题

c++ - 这个结构已定义,那么为什么函数认为它没有定义呢?

ruby-on-rails - Rails sanitize 删除默认允许的标签

ruby-on-rails - 在 Rails 3 中使用作用域

ruby-on-rails - "down"迁移何时有用?